Linux System Calls
SO FAR,WE’VE PRESENTED A VARIETY OF FUNCTIONS that your program can invoke
to perform system-related functions, such as parsing command-line options, manipu-
lating processes, and mapping memory. If you look under the hood, you’ll find that
these functions fall into two categories, based on how they are implemented.
n A library function is an ordinary function that resides in a library external to your
program. Most of the library functions we’ve presented so far are in the standard
C library, libc. For example, getopt_long and mkstemp are functions provided in
the C library.
A call to a library function is just like any other function call.The arguments are
placed in processor registers or onto the stack, and execution is transferred to
the start of the function’s code, which typically resides in a loaded shared library.
n A system call is implemented in the Linux kernel.When a program makes a
system call, the arguments are packaged up and handed to the kernel, which
takes over execution of the program until the call completes.A system call isn’t
an ordinary function call, and a special procedure is required to transfer control
to the kernel. However, the GNU C library (the implementation of the standard
C library provided with GNU/Linux systems) wraps Linux system calls with
functions so that you can call them easily. Low-level I/O functions such as open
and read are examples of system calls on Linux.
168 Chapter 8
Linux System Calls
The set of Linux system calls forms the most basic interface between programs
and the Linux kernel. Each call presents a basic operation or capability.
Some system calls are very powerful and can exert great influence on the
system. For instance, some system calls enable you to shut down the Linux
system or to allocate system resources and prevent other users from accessing
them.These calls have the restriction that only processes running with superuser
privilege (programs run