SYSCALL(2)

NAME
syscall, __syscall - indirect system call

SYNOPSIS
#include <sys/syscall.h>
#include <unistd.h>
int
syscall(int number, ...);
__syscall(quad_t number, ...);

DESCRIPTION
syscall() performs the system call whose assembly language interface has the specified number with the specified arguments. Symbolic constants for system calls can be found in the header file <sys/syscall.h>.

Since different system calls have different return types, a prototype of __syscall specifying the correct return type should be declared locally. This is especially important for system calls returning larger-than-int results.

The __syscall form should be used when one or more of the parameters is a 64-bit argument to ensure that argument alignment is correct. This system call is useful for testing new system calls that do not have entries in the C library.

RETURN VALUES
The return values are defined by the system call being invoked. In general, for system calls returning int, a 0 return value indicates success. A -1 return value indicates an error, and an error code is stored in errno.

HISTORY
The predecessor of these functions, the former indir() system call, first appeared in AT&T UNIX. The syscall() function first appeared in 3BSD.

BUGS
There is no way to simulate system calls that have multiple return values such as pipe(2).