mirror of https://github.com/mkerrisk/man-pages
803 lines
23 KiB
Groff
803 lines
23 KiB
Groff
.\" Copyright (C) 2007 Michael Kerrisk <mtk.manpages@gmail.com>
|
|
.\" with some input from Stepan Kasal <kasal@ucw.cz>
|
|
.\"
|
|
.\" Some content retained from an earlier version of this page:
|
|
.\" Copyright (C) 1998 Andries Brouwer (aeb@cwi.nl)
|
|
.\" Modifications for 2.2 and 2.4 Copyright (C) 2002 Ian Redfern
|
|
.\" <redferni@logica.com>
|
|
.\"
|
|
.\" Permission is granted to make and distribute verbatim copies of this
|
|
.\" manual provided the copyright notice and this permission notice are
|
|
.\" preserved on all copies.
|
|
.\"
|
|
.\" Permission is granted to copy and distribute modified versions of this
|
|
.\" manual under the conditions for verbatim copying, provided that the
|
|
.\" entire resulting derived work is distributed under the terms of a
|
|
.\" permission notice identical to this one.
|
|
.\"
|
|
.\" Since the Linux kernel and libraries are constantly changing, this
|
|
.\" manual page may be incorrect or out-of-date. The author(s) assume no
|
|
.\" responsibility for errors or omissions, or for damages resulting from
|
|
.\" the use of the information contained herein. The author(s) may not
|
|
.\" have taken the same level of care in the production of this manual,
|
|
.\" which is licensed free of charge, as they might when working
|
|
.\" professionally.
|
|
.\"
|
|
.\" Formatted or processed versions of this manual, if unaccompanied by
|
|
.\" the source, must acknowledge the copyright and authors of this work.
|
|
.\"
|
|
.TH SYSCALLS 2 2010-03-06 "Linux" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
syscalls \- Linux system calls
|
|
.SH SYNOPSIS
|
|
Linux system calls.
|
|
.SH DESCRIPTION
|
|
The system call is the fundamental interface between an application
|
|
and the Linux kernel.
|
|
.SS System calls and library wrapper functions
|
|
System calls are generally not invoked directly,
|
|
but rather via wrapper functions in glibc (or perhaps some other library).
|
|
For details of direct invocation of a system call, see
|
|
.BR intro (2).
|
|
Often, but not always, the name of the wrapper function is the same
|
|
as the name of the system call that it invokes.
|
|
For example, glibc contains a function
|
|
.BR truncate ()
|
|
which invokes the underlying "truncate" system call.
|
|
|
|
Often the glibc wrapper function is quite thin, doing little work
|
|
other than copying arguments to the right registers
|
|
before invoking the system call,
|
|
and then setting
|
|
.I errno
|
|
appropriately after the system call has returned.
|
|
(These are the same steps that are performed by
|
|
.BR syscall (2),
|
|
which can be used to invoke system calls
|
|
for which no wrapper function is provided.)
|
|
Note: system calls indicate a failure by returning a negative error
|
|
number to the caller;
|
|
when this happens,
|
|
the wrapper function negates the returned error number
|
|
(to make it positive), copies it to
|
|
.IR errno ,
|
|
and returns \-1 to the caller of the wrapper.
|
|
|
|
Sometimes, however, the wrapper function does some extra work
|
|
before invoking the system call.
|
|
For example, nowadays there are (for reasons described below) two
|
|
related system calls,
|
|
.BR truncate (2)
|
|
and
|
|
.BR truncate64 (2),
|
|
and the glibc
|
|
.BR truncate ()
|
|
wrapper function checks which of those system calls
|
|
are provided by the kernel and determines which should be employed.
|
|
.SS System call list
|
|
Below is a list of those system calls that are common to most platforms.
|
|
In the list, the
|
|
.I Kernel
|
|
column indicates the kernel version
|
|
for those system calls that were new in Linux 2.2,
|
|
or have appeared since that kernel version.
|
|
Note the following points:
|
|
.IP * 3
|
|
Where no kernel version is indicated,
|
|
the system call appeared in kernel 1.0 or earlier.
|
|
.IP *
|
|
Where a system call is marked "1.2"
|
|
this means the system call probably appeared in a 1.1.x kernel version,
|
|
and first appeared in a stable kernel with 1.2.
|
|
(Development of the 1.2 kernel was initiated from a branch of kernel
|
|
1.0.6 via the 1.1.x unstable kernel series.)
|
|
.IP *
|
|
Where a system call is marked "2.0"
|
|
this means the system call probably appeared in a 1.3.x kernel version,
|
|
and first appeared in a stable kernel with 2.0.
|
|
(Development of the 2.0 kernel was initiated from a branch of kernel
|
|
1.2.x, somewhere around 1.2.10,
|
|
via the 1.3.x unstable kernel series.)
|
|
.\" Was kernel 2.0 started from a branch of 1.2.10?
|
|
.\" At least from the timestamps of the tarballs of
|
|
.\" of 1.2.10 and 1.3.0, that's how it looks, but in
|
|
.\" fact the diff doesn't seem very clear, the
|
|
.\" 1.3.0 .tar.bz is much bigger (2.0 MB) than the
|
|
.\" 1.2.10 .tar.bz2 (1.8 MB), and AEB points out the
|
|
.\" timestamps of some files in 1.3.0 seem to be older
|
|
.\" than those in 1.2.10. All of this suggests
|
|
.\" that there might not have been a clean branch point.
|
|
.IP *
|
|
Where a system call is marked "2.2"
|
|
this means the system call probably appeared in a 2.1.x kernel version,
|
|
and first appeared in a stable kernel with 2.2.0.
|
|
(Development of the 2.2 kernel was initiated from a branch of kernel
|
|
2.0.21 via the 2.1.x unstable kernel series.)
|
|
.IP *
|
|
Where a system call is marked "2.4"
|
|
this means the system call probably appeared in a 2.3.x kernel version,
|
|
and first appeared in a stable kernel with 2.4.0.
|
|
(Development of the 2.4 kernel was initiated from a branch of
|
|
kernel 2.2.8 via the 2.3.x unstable kernel series.)
|
|
.IP *
|
|
Where a system call is marked "2.6"
|
|
this means the system call probably appeared in a 2.5.x kernel version,
|
|
and first appeared in a stable kernel with 2.6.0.
|
|
(Development of kernel 2.6 was initiated from a branch
|
|
of kernel 2.4.15 via the 2.5.x unstable kernel series.)
|
|
.IP *
|
|
Starting with kernel 2.6.0, the development model changed,
|
|
and new system calls may appear in each 2.6.x release.
|
|
In this case, the exact version number where the system call appeared
|
|
is shown.
|
|
.IP *
|
|
In some cases, a system call was added to a stable kernel
|
|
series after it branched from the previous stable kernel
|
|
series, and then backported into the earlier stable kernel series.
|
|
For example some system calls that appeared in 2.6.x were also backported
|
|
into a 2.4.x release after 2.4.15.
|
|
When this is so, the version where the system call appeared
|
|
in both of the major kernel series is listed.
|
|
.PP
|
|
The list of system calls that are available as at kernel 2.6.33
|
|
(or in a few cases only on older kernels) is as follows:
|
|
.\"
|
|
.\" Looking at scripts/checksyscalls.sh in the kernel source is
|
|
.\" instructive about i386 specifics.
|
|
.\"
|
|
.TS
|
|
l l l
|
|
---
|
|
l l l.
|
|
\fBSystem call\fP \fBKernel\fP \fBNotes\fP
|
|
|
|
\fB_llseek\fP(2) 1.2
|
|
\fB_newselect\fP(2)
|
|
\fB_sysctl\fP(2)
|
|
\fBaccept\fP(2)
|
|
\fBaccept4\fP(2) 2.6.28
|
|
\fBaccess\fP(2)
|
|
\fBacct\fP(2)
|
|
\fBadd_key\fP(2) 2.6.11
|
|
\fBadjtimex\fP(2)
|
|
\fBafs_syscall\fP(2) Not implemented
|
|
\fBalarm\fP(2)
|
|
\fBalloc_hugepages\fP(2) 2.5.36 Removed in 2.5.44
|
|
\fBbdflush\fP(2)
|
|
\fBbind\fP(2)
|
|
\fBbreak\fP(2) Not implemented
|
|
\fBbrk\fP(2)
|
|
\fBcacheflush\fP(2) 1.2 Not on i386
|
|
\fBcapget\fP(2) 2.2
|
|
\fBcapset\fP(2) 2.2
|
|
\fBchdir\fP(2)
|
|
\fBchmod\fP(2)
|
|
\fBchown\fP(2)
|
|
\fBchown32\fP(2) 2.4
|
|
\fBchroot\fP(2)
|
|
\fBclock_getres\fP(2) 2.6
|
|
\fBclock_gettime\fP(2) 2.6
|
|
\fBclock_nanosleep\fP(2) 2.6
|
|
\fBclock_settime\fP(2) 2.6
|
|
\fBclone\fP(2)
|
|
\fBclose\fP(2)
|
|
\fBconnect\fP(2)
|
|
\fBcreat\fP(2)
|
|
\fBcreate_module\fP(2)
|
|
\fBdelete_module\fP(2)
|
|
\fBdup\fP(2)
|
|
\fBdup2\fP(2)
|
|
\fBdup3\fP(2) 2.6.27
|
|
\fBepoll_create\fP(2) 2.6
|
|
\fBepoll_create1\fP(2) 2.6.27
|
|
\fBepoll_ctl\fP(2) 2.6
|
|
\fBepoll_pwait\fP(2) 2.6.19
|
|
\fBepoll_wait\fP(2) 2.6
|
|
\fBeventfd\fP(2) 2.6.22
|
|
\fBeventfd2\fP(2) 2.6.27
|
|
\fBexecve\fP(2)
|
|
\fBexit\fP(2)
|
|
\fBexit_group\fP(2) 2.6
|
|
\fBfaccessat\fP(2) 2.6.16
|
|
\fBfadvise64\fP(2) 2.6
|
|
.\" Implements \fBposix_fadvise\fP(2)
|
|
\fBfadvise64_64\fP(2) 2.6
|
|
\fBfallocate\fP(2) 2.6.23
|
|
\fBfchdir\fP(2)
|
|
\fBfchmod\fP(2)
|
|
\fBfchmodat\fP(2) 2.6.16
|
|
\fBfchown\fP(2)
|
|
\fBfchown32\fP(2) 2.4
|
|
\fBfchownat\fP(2) 2.6.16
|
|
\fBfcntl\fP(2)
|
|
\fBfcntl64\fP(2) 2.4
|
|
\fBfdatasync\fP(2)
|
|
\fBfgetxattr\fP(2) 2.6; 2.4.18
|
|
\fBflistxattr\fP(2) 2.6; 2.4.18
|
|
\fBflock\fP(2) 2.0
|
|
\fBfork\fP(2)
|
|
\fBfree_hugepages\fP(2) 2.5.36 Removed in 2.5.44
|
|
\fBfremovexattr\fP(2) 2.6; 2.4.18
|
|
\fBfsetxattr\fP(2) 2.6; 2.4.18
|
|
\fBfstat\fP(2)
|
|
\fBfstat64\fP(2) 2.4
|
|
\fBfstatat64\fP(2) 2.6.16
|
|
\fBfstatfs\fP(2)
|
|
\fBfstatfs64\fP(2) 2.6
|
|
\fBfsync\fP(2)
|
|
\fBftime\fP(2) Not implemented
|
|
.\" Implemented in glibc; see \fBftime\fP(3)
|
|
\fBftruncate\fP(2)
|
|
\fBftruncate64\fP(2) 2.4
|
|
\fBfutex\fP(2) 2.6
|
|
\fBfutimesat\fP(2) 2.6.16
|
|
\fBget_kernel_syms\fP(2)
|
|
\fBget_mempolicy\fP(2) 2.6.6
|
|
\fBget_robust_list\fP(2) 2.6.17
|
|
\fBget_thread_area\fP(2) 2.6
|
|
\fBgetcpu\fP(2) 2.6.19
|
|
\fBgetcwd\fP(2) 2.2
|
|
\fBgetdents\fP(2) 2.0
|
|
\fBgetdents64\fP(2) 2.4
|
|
\fBgetegid\fP(2)
|
|
\fBgetegid32\fP(2) 2.4
|
|
\fBgeteuid\fP(2)
|
|
\fBgeteuid32\fP(2) 2.4
|
|
\fBgetgid\fP(2)
|
|
\fBgetgid32\fP(2) 2.4
|
|
\fBgetgroups\fP(2)
|
|
\fBgetgroups32\fP(2) 2.4
|
|
\fBgetitimer\fP(2)
|
|
\fBgetpeername\fP(2)
|
|
\fBgetpagesize\fP(2) 2.0 Not on i386
|
|
\fBgetpgid\fP(2)
|
|
\fBgetpgrp\fP(2)
|
|
\fBgetpid\fP(2)
|
|
\fBgetpmsg\fP(2) Not implemented
|
|
.\" Reserved for STREAMS support
|
|
\fBgetppid\fP(2)
|
|
\fBgetpriority\fP(2)
|
|
\fBgetresgid\fP(2) 2.2
|
|
\fBgetresgid32\fP(2) 2.4
|
|
\fBgetresuid\fP(2) 2.2
|
|
\fBgetresuid32\fP(2) 2.4
|
|
\fBgetrlimit\fP(2)
|
|
\fBgetrusage\fP(2)
|
|
\fBgetsid\fP(2) 2.0
|
|
\fBgetsockname\fP(2)
|
|
\fBgetsockopt\fP(2)
|
|
\fBgettid\fP(2) 2.4.11
|
|
\fBgettimeofday\fP(2)
|
|
\fBgetuid\fP(2)
|
|
\fBgetuid32\fP(2) 2.4
|
|
.\" \fBgetunwind\fP(2) 2.4.8 ia64; DEPRECATED
|
|
\fBgetxattr\fP(2) 2.6; 2.4.18
|
|
\fBgtty\fP(2) Not implemented
|
|
\fBidle\fP(2) Not implemented
|
|
\fBinit_module\fP(2)
|
|
\fBinotify_add_watch\fP(2) 2.6.13
|
|
\fBinotify_init\fP(2) 2.6.13
|
|
\fBinotify_init1\fP(2) 2.6.27
|
|
\fBinotify_rm_watch\fP(2) 2.6.13
|
|
\fBio_cancel\fP(2) 2.6
|
|
\fBio_destroy\fP(2) 2.6
|
|
\fBio_getevents\fP(2) 2.6
|
|
\fBio_setup\fP(2) 2.6
|
|
\fBio_submit\fP(2) 2.6
|
|
\fBioctl\fP(2)
|
|
\fBioperm\fP(2)
|
|
\fBiopl\fP(2)
|
|
\fBioprio_get\fP(2) 2.6.13
|
|
\fBioprio_set\fP(2) 2.6.13
|
|
\fBipc\fP(2)
|
|
.\" Implements System V IPC calls
|
|
\fBkexec_load\fP(2) 2.6.7
|
|
.\" Was named sys_kexec_load() from 2.6.7 to 2.6.16
|
|
\fBkeyctl\fP(2) 2.6.11
|
|
\fBkill\fP(2)
|
|
\fBlchown\fP(2) 2.2
|
|
\fBlchown32\fP(2) 2.4
|
|
\fBlgetxattr\fP(2) 2.6; 2.4.18
|
|
\fBlink\fP(2)
|
|
\fBlinkat\fP(2) 2.6.16
|
|
\fBlisten\fP(2)
|
|
\fBlistxattr\fP(2) 2.6; 2.4.18
|
|
\fBllistxattr\fP(2) 2.6; 2.4.18
|
|
\fBlock\fP(2) Not implemented
|
|
\fBlookup_dcookie\fP(2) 2.6
|
|
\fBlremovexattr\fP(2) 2.6; 2.4.18
|
|
\fBlseek\fP(2)
|
|
\fBlsetxattr\fP(2) 2.6; 2.4.18
|
|
\fBlstat\fP(2)
|
|
\fBlstat64\fP(2) 2.4
|
|
\fBmadvise\fP(2) 2.4
|
|
\fBmadvise1\fP(2) 2.4
|
|
\fBmbind\fP(2) 2.6.6
|
|
.\" \fBmemory_ordering\fP(2) ??? Sparc64
|
|
\fBmigrate_pages\fP(2) 2.6.16
|
|
\fBmincore\fP(2) 2.4
|
|
\fBmkdir\fP(2)
|
|
\fBmkdirat\fP(2) 2.6.16
|
|
\fBmknod\fP(2)
|
|
\fBmknodat\fP(2) 2.6.16
|
|
\fBmlock\fP(2)
|
|
\fBmlockall\fP(2)
|
|
\fBmmap\fP(2)
|
|
\fBmmap2\fP(2) 2.4
|
|
\fBmodify_ldt\fP(2)
|
|
\fBmount\fP(2)
|
|
\fBmove_pages\fP(2) 2.6.18
|
|
\fBmprotect\fP(2)
|
|
\fBmpx\fP(2) Not implemented
|
|
\fBmq_getsetattr\fP(2) 2.6.6
|
|
.\" Implements \fBmq_getattr\fP(3) and \fBmq_setattr\fP(3)
|
|
\fBmq_notify\fP(2) 2.6.6
|
|
\fBmq_open\fP(2) 2.6.6
|
|
\fBmq_timedreceive\fP(2) 2.6.6
|
|
\fBmq_timedsend\fP(2) 2.6.6
|
|
\fBmq_unlink\fP(2)
|
|
\fBmremap\fP(2) 2.0
|
|
\fBmsgctl\fP(2)
|
|
\fBmsgget\fP(2)
|
|
\fBmsgrcv\fP(2)
|
|
\fBmsgsnd\fP(2)
|
|
\fBmsync\fP(2) 2.0
|
|
.\" \fBmultiplexer\fP(2) ?? __NR_multiplexer reserved on
|
|
.\" PowerPC, but unimplemented?
|
|
\fBmunlock\fP(2)
|
|
\fBmunlockall\fP(2)
|
|
\fBmunmap\fP(2)
|
|
\fBnanosleep\fP(2) 2.0
|
|
\fBnfsservctl\fP(2) 2.2
|
|
\fBnice\fP(2)
|
|
\fBoldfstat\fP(2)
|
|
\fBoldlstat\fP(2)
|
|
\fBoldolduname\fP(2)
|
|
\fBoldstat\fP(2)
|
|
\fBolduname\fP(2)
|
|
\fBopen\fP(2)
|
|
\fBopenat\fP(2) 2.6.16
|
|
\fBpause\fP(2)
|
|
\fBpciconfig_iobase\fP(2) 2.2.15; 2.4 Not on i386
|
|
.\" Alpha, PowerPC, ARM; not i386
|
|
\fBpciconfig_read\fP(2) 2.0.26; 2.2 Not on i386
|
|
.\" , PowerPC, ARM; not i386
|
|
\fBpciconfig_write\fP(2) 2.0.26; 2.2 Not on i386
|
|
.\" , PowerPC, ARM; not i386
|
|
\fBperf_event_open\fP(2) 2.6.31 Was called perf_counter_open()
|
|
in 2.6.31; renamed in 2.6.32
|
|
\fBpersonality\fP(2) 1.2
|
|
.\" \fBperfctr\fP(2) ??? Sparc32, Sparc64
|
|
.\" \fBperfmonctl\fP(2) ??? ia64
|
|
\fBphys\fP(2) Not implemented
|
|
.\" Unimplemented (no slot since 2.1.116)
|
|
\fBpipe\fP(2)
|
|
\fBpipe2\fP(2) 2.6.27
|
|
\fBpivot_root\fP(2) 2.4
|
|
\fBpoll\fP(2) 2.2
|
|
\fBppoll\fP(2) 2.6.16
|
|
\fBprctl\fP(2) 2.2
|
|
\fBpread64\fP(2) Added as "pread" in 2.2;
|
|
renamed "pread64" in 2.6
|
|
\fBpreadv\fP(2) 2.6.30
|
|
\fBprof\fP(2) Not implemented
|
|
\fBprofil\fP(2) Not implemented
|
|
.\" Implemented in glibc; see \fBprofil\fP(3)
|
|
\fBpselect6\fP(2) 2.6.16
|
|
.\" Implements \fBpselect\fP(2)
|
|
\fBptrace\fP(2)
|
|
\fBputpmsg\fP(2) Not implemented
|
|
.\" Reserved for STREAMS support
|
|
\fBpwrite64\fP(2) Added as "pwrite" in 2.2;
|
|
renamed "pwrite64" in 2.6
|
|
\fBpwritev\fP(2) 2.6.30
|
|
\fBquery_module\fP(2) 2.2
|
|
\fBquotactl\fP(2)
|
|
\fBread\fP(2)
|
|
\fBreadahead\fP(2) 2.4.13
|
|
\fBreaddir\fP(2)
|
|
.\" Supersedes \fBgetdents\fP(2)
|
|
\fBreadlink\fP(2)
|
|
\fBreadlinkat\fP(2) 2.6.16
|
|
\fBreadv\fP(2) 2.0
|
|
\fBreboot\fP(2)
|
|
\fBrecv\fP(2)
|
|
\fBrecvfrom\fP(2)
|
|
\fBrecvmsg\fP(2)
|
|
\fBrecvmmsg\fP(2) 2.6.33
|
|
\fBremap_file_pages\fP(2) 2.6
|
|
\fBremovexattr\fP(2) 2.6; 2.4.18
|
|
\fBrename\fP(2)
|
|
\fBrenameat\fP(2) 2.6.16
|
|
\fBrequest_key\fP(2) 2.6.11
|
|
\fBrestart_syscall\fP(2) 2.6
|
|
\fBrmdir\fP(2)
|
|
\fBrt_sigaction\fP(2) 2.2
|
|
\fBrt_sigpending\fP(2) 2.2
|
|
\fBrt_sigprocmask\fP(2) 2.2
|
|
\fBrt_sigqueueinfo\fP(2) 2.2
|
|
.\" Implements \fBsigqueue\fP(2)
|
|
\fBrt_sigreturn\fP(2) 2.2
|
|
\fBrt_sigsuspend\fP(2) 2.2
|
|
\fBrt_sigtimedwait\fP(2) 2.2
|
|
\fBrt_tgsigqueueinfo\fP(2) 2.6.31
|
|
.\" Implements \fBpthread_sigqueue\fP(3)
|
|
\fBsched_get_priority_max\fP(2) 2.0
|
|
\fBsched_get_priority_min\fP(2) 2.0
|
|
\fBsched_getaffinity\fP(2) 2.6
|
|
\fBsched_getparam\fP(2) 2.0
|
|
\fBsched_getscheduler\fP(2) 2.0
|
|
\fBsched_rr_get_interval\fP(2) 2.0
|
|
\fBsched_setaffinity\fP(2) 2.6
|
|
\fBsched_setparam\fP(2) 2.0
|
|
\fBsched_setscheduler\fP(2) 2.0
|
|
\fBsched_yield\fP(2) 2.0
|
|
\fBsecurity\fP(2) Not implemented
|
|
\fBselect\fP(2)
|
|
\fBsemctl\fP(2)
|
|
\fBsemget\fP(2)
|
|
\fBsemop\fP(2)
|
|
\fBsemtimedop\fP(2) 2.6; 2.4.22
|
|
\fBsend\fP(2)
|
|
\fBsendfile\fP(2) 2.2
|
|
\fBsendfile64\fP(2) 2.6; 2.4.19
|
|
\fBsendmsg\fP(2)
|
|
\fBsendto\fP(2)
|
|
\fBset_mempolicy\fP(2) 2.6.6
|
|
\fBset_robust_list\fP(2) 2.6.17
|
|
\fBset_thread_area\fP(2) 2.6
|
|
\fBset_tid_address\fP(2) 2.6
|
|
\fBset_zone_reclaim\fP(2) 2.6.13 Removed in 2.6.16 (was never
|
|
available to userspace)
|
|
.\" See http://lkml.org/lkml/2005/8/1/83
|
|
.\" "[PATCH] remove sys_set_zone_reclaim()"
|
|
\fBsetdomainname\fP(2)
|
|
\fBsetfsgid\fP(2) 1.2
|
|
\fBsetfsgid32\fP(2) 2.4
|
|
\fBsetfsuid\fP(2) 1.2
|
|
\fBsetfsuid32\fP(2) 2.4
|
|
\fBsetgid\fP(2)
|
|
\fBsetgid32\fP(2) 2.4
|
|
\fBsetgroups\fP(2)
|
|
\fBsetgroups32\fP(2) 2.4
|
|
\fBsethostname\fP(2)
|
|
\fBsetitimer\fP(2)
|
|
\fBsetpgid\fP(2)
|
|
\fBsetpriority\fP(2)
|
|
\fBsetregid\fP(2)
|
|
\fBsetregid32\fP(2) 2.4
|
|
\fBsetresgid\fP(2) 2.2
|
|
\fBsetresgid32\fP(2) 2.4
|
|
\fBsetresuid\fP(2) 2.2
|
|
\fBsetresuid32\fP(2) 2.4
|
|
\fBsetreuid\fP(2)
|
|
\fBsetreuid32\fP(2) 2.4
|
|
\fBsetrlimit\fP(2)
|
|
\fBsetsid\fP(2)
|
|
\fBsetsockopt\fP(2)
|
|
\fBsettimeofday\fP(2)
|
|
\fBsetuid\fP(2)
|
|
\fBsetuid32\fP(2) 2.4
|
|
\fBsetup\fP(2) Removed in 2.2
|
|
\fBsetxattr\fP(2) 2.6; 2.4.18
|
|
\fBsgetmask\fP(2)
|
|
\fBshmat\fP(2)
|
|
\fBshmctl\fP(2)
|
|
\fBshmdt\fP(2)
|
|
\fBshmget\fP(2)
|
|
\fBshutdown\fP(2)
|
|
\fBsigaction\fP(2)
|
|
\fBsigaltstack\fP(2) 2.2
|
|
\fBsignal\fP(2)
|
|
\fBsignalfd\fP(2) 2.6.22
|
|
\fBsignalfd4\fP(2) 2.6.27
|
|
\fBsigpending\fP(2)
|
|
\fBsigprocmask\fP(2)
|
|
\fBsigreturn\fP(2)
|
|
\fBsigsuspend\fP(2)
|
|
\fBsocket\fP(2)
|
|
\fBsocketcall\fP(2)
|
|
.\" Implements BSD socket calls
|
|
\fBsocketpair\fP(2)
|
|
\fBsplice\fP(2) 2.6.17
|
|
\fBspu_create\fP(2) 2.6.16 PowerPC only
|
|
\fBspu_run\fP(2) 2.6.16 PowerPC only
|
|
\fBssetmask\fP(2)
|
|
\fBstat\fP(2)
|
|
\fBstat64\fP(2) 2.4
|
|
\fBstatfs\fP(2)
|
|
\fBstatfs64\fP(2) 2.6
|
|
\fBstime\fP(2)
|
|
\fBstty\fP(2) Not implemented
|
|
\fBswapoff\fP(2)
|
|
\fBswapon\fP(2)
|
|
\fBsymlink\fP(2)
|
|
\fBsymlinkat\fP(2) 2.6.16
|
|
\fBsync\fP(2)
|
|
\fBsync_file_range\fP(2) 2.6.17
|
|
.\" \fBsys_debug_setcontext\fP(2) ??? PowerPC if CONFIG_PPC32
|
|
\fBsysfs\fP(2) 1.2
|
|
\fBsysinfo\fP(2)
|
|
\fBsyslog\fP(2)
|
|
.\" glibc interface is \fBklogctl\fP(3)
|
|
\fBtee\fP(2) 2.6.17
|
|
\fBtgkill\fP(2) 2.6
|
|
\fBtime\fP(2)
|
|
\fBtimer_create\fP(2) 2.6
|
|
\fBtimer_delete\fP(2) 2.6
|
|
\fBtimer_getoverrun\fP(2) 2.6
|
|
\fBtimer_gettime\fP(2) 2.6
|
|
\fBtimer_settime\fP(2) 2.6
|
|
\fBtimerfd_create\fP(2) 2.6.25
|
|
\fBtimerfd_gettime\fP(2) 2.6.25
|
|
\fBtimerfd_settime\fP(2) 2.6.25
|
|
\fBtimes\fP(2)
|
|
\fBtkill\fP(2) 2.6; 2.4.22
|
|
\fBtruncate\fP(2)
|
|
\fBtruncate64\fP(2) 2.4
|
|
\fBtuxcall\fP(2) Not implemented
|
|
.\" Unimplemented; no slot on i386
|
|
.\" As at 2.6.22, tuxcall has a slot on PowerPC, x86_64, and alpha
|
|
\fBugetrlimit\fP(2) 2.4
|
|
\fBulimit\fP(2) Not implemented
|
|
.\" Implemented in glibc; see \fBulimit\fP(3)
|
|
\fBumask\fP(2)
|
|
\fBumount\fP(2)
|
|
.\" sys_oldumount() -- __NR_umount
|
|
\fBumount2\fP(2) 2.2
|
|
.\" sys_umount() -- __NR_umount2
|
|
\fBuname\fP(2)
|
|
\fBunlink\fP(2)
|
|
\fBunlinkat\fP(2) 2.6.16
|
|
\fBunshare\fP(2) 2.6.16
|
|
\fBuselib\fP(2)
|
|
\fBustat\fP(2)
|
|
\fButime\fP(2)
|
|
\fButimensat\fP(2) 2.6.22
|
|
\fButimes\fP(2) 2.2
|
|
\fBvfork\fP(2)
|
|
\fBvhangup\fP(2)
|
|
\fBvm86old\fP(2)
|
|
.\" Superseded by \fBvm86\fP(2)
|
|
\fBvmsplice\fP(2) 2.6.17
|
|
\fBvserver\fP(2) Not implemented
|
|
\fBwait4\fP(2)
|
|
\fBwaitid\fP(2) 2.6.10
|
|
\fBwaitpid\fP(2)
|
|
\fBwrite\fP(2)
|
|
\fBwritev\fP(2) 2.0
|
|
.TE
|
|
.PP
|
|
On many platforms, including i386, socket calls are all multiplexed
|
|
(via glibc wrapper functions) through
|
|
.BR socketcall (2)
|
|
and similarly System V IPC calls are multiplexed through
|
|
.BR ipc (2).
|
|
.SH NOTES
|
|
Note the following points:
|
|
.IP * 3
|
|
Although slots are reserved for them in the system call table,
|
|
the following system calls are not implemented in the standard kernel:
|
|
.BR afs_syscall (2), \" __NR_afs_syscall is 53 on Linux 2.6.22/i386
|
|
.BR break (2), \" __NR_break is 17 on Linux 2.6.22/i386
|
|
.BR ftime (2), \" __NR_ftime is 35 on Linux 2.6.22/i386
|
|
.BR getpmsg (2), \" __NR_getpmsg is 188 on Linux 2.6.22/i386
|
|
.BR gtty (2), \" __NR_gtty is 32 on Linux 2.6.22/i386
|
|
.BR idle (2), \" __NR_idle is 112 on Linux 2.6.22/i386
|
|
.BR lock (2), \" __NR_lock is 53 on Linux 2.6.22/i386
|
|
.BR madvise1 (2), \" __NR_madvise1 is 219 on Linux 2.6.22/i386
|
|
.BR mpx (2), \" __NR_mpx is 66 on Linux 2.6.22/i386
|
|
.BR phys (2), \" Slot has been reused
|
|
.BR prof (2), \" __NR_prof is 44 on Linux 2.6.22/i386
|
|
.BR profil (2), \" __NR_profil is 98 on Linux 2.6.22/i386
|
|
.BR putpmsg (2), \" __NR_putpmsg is 189 on Linux 2.6.22/i386
|
|
.\" __NR_security is 223 on Linux 2.4/i386; absent on 2.6/i386, present
|
|
.\" on a couple of 2.6 architectures
|
|
.BR security (2), \" __NR_security is 223 on Linux 2.4/i386
|
|
.BR stty (2), \" __NR_stty is 31 on Linux 2.6.22/i386
|
|
.BR tuxcall (2), \" __NR_tuxcall is 184 on x86_64, also on PPC and alpha
|
|
.BR ulimit (2), \" __NR_ulimit is 58 on Linux 2.6.22/i386
|
|
and
|
|
.BR vserver (2) \" __NR_vserver is 273 on Linux 2.6.22/i386
|
|
(see also
|
|
.BR unimplemented (2)).
|
|
However,
|
|
.BR ftime (3),
|
|
.BR profil (3)
|
|
and
|
|
.BR ulimit (3)
|
|
exist as library routines.
|
|
The slot for
|
|
.BR phys (2)
|
|
is in use since kernel 2.1.116 for
|
|
.BR umount (2);
|
|
.BR phys (2)
|
|
will never be implemented.
|
|
.IP *
|
|
The
|
|
.BR getpmsg (2)
|
|
and
|
|
.BR putpmsg (2)
|
|
calls are for kernels patched to support STREAMS,
|
|
and may never be in the standard kernel.
|
|
.\" The security call is for future use.
|
|
.PP
|
|
Roughly speaking, the code belonging to the system call
|
|
with number __NR_xxx defined in
|
|
.I /usr/include/asm/unistd.h
|
|
can be found in the kernel source in the routine
|
|
.IR sys_xxx ().
|
|
(The dispatch table for i386 can be found in
|
|
.IR /usr/src/linux/arch/i386/kernel/entry.S .)
|
|
There are many exceptions, however, mostly because
|
|
older system calls were superseded by newer ones,
|
|
and this has been treated somewhat unsystematically.
|
|
On platforms with
|
|
proprietary OS emulation, such as parisc, sparc, sparc64 and alpha,
|
|
there are many additional system calls; mips64 also contains a full
|
|
set of 32-bit system calls.
|
|
|
|
Over time, changes to the interfaces of some system calls have been
|
|
necessary.
|
|
One reason for such changes was the need to increase the size of
|
|
structures or scalar values passed to the system call.
|
|
Because of these changes, there are now various groups
|
|
of related system calls
|
|
(e.g.,
|
|
.BR truncate (2)
|
|
and
|
|
.BR truncate64 (2))
|
|
which perform similar tasks, but which vary in
|
|
details such as the size of their arguments.
|
|
(As noted earlier, applications are generally unaware of this:
|
|
the glibc wrapper functions do some work to ensure that the right
|
|
system call is invoked, and that ABI compatibility is
|
|
preserved for old binaries.)
|
|
Examples of systems calls that exist in multiple versions are
|
|
the following:
|
|
.IP * 3
|
|
By now there are three different versions of
|
|
.BR stat (2):
|
|
.IR sys_stat ()
|
|
(slot
|
|
.IR __NR_oldstat ),
|
|
.IR sys_newstat ()
|
|
(slot
|
|
.IR __NR_stat ),
|
|
and
|
|
.IR sys_stat64 ()
|
|
(slot
|
|
.IR __NR_stat64 ),
|
|
with the last being the most current.
|
|
.\" e.g., on 2.6.22/i386: __NR_oldstat 18, __NR_stat 106, __NR_stat64 195
|
|
.\" The stat system calls deal with three different data structures,
|
|
.\" defined in include/asm-i386/stat.h: __old_kernel_stat, stat, stat64
|
|
A similar story applies for
|
|
.BR lstat (2)
|
|
and
|
|
.BR fstat (2).
|
|
.IP *
|
|
Similarly, the defines
|
|
.IR __NR_oldolduname ,
|
|
.IR __NR_olduname ,
|
|
and
|
|
.I __NR_uname
|
|
refer to the routines
|
|
.IR sys_olduname (),
|
|
.IR sys_uname ()
|
|
and
|
|
.IR sys_newuname ().
|
|
.IP *
|
|
In Linux 2.0, a new version of
|
|
.BR vm86 (2)
|
|
appeared, with the old and the new kernel routines being named
|
|
.IR sys_vm86old ()
|
|
and
|
|
.IR sys_vm86 ().
|
|
.IP *
|
|
In Linux 2.4, a new version of
|
|
.BR getrlimit (2)
|
|
appeared, with the old and the new kernel routines being named
|
|
.IR sys_old_getrlimit ()
|
|
(slot
|
|
.IR __NR_getrlimit )
|
|
and
|
|
.IR sys_getrlimit ()
|
|
(slot
|
|
.IR __NR_ugetrlimit ).
|
|
.IP *
|
|
Linux 2.4 increased the size of user and group IDs from 16 to 32 bits.
|
|
.\" 64 bit off_t changes: ftruncate64, *stat64,
|
|
.\" fcntl64 (because of the flock structure), getdents64, *statfs64
|
|
To support this change, a range of system calls were added
|
|
(e.g.,
|
|
.BR chown32 (2),
|
|
.BR getuid32 (2),
|
|
.BR getgroups32 (2),
|
|
.BR setresuid32 (2)),
|
|
superseding earlier calls of the same name without the
|
|
"32" suffix.
|
|
.IP *
|
|
Linux 2.4 added support for applications on 32-bit architectures
|
|
to access large files (i.e., files for which the sizes and
|
|
file offsets can't be represented in 32 bits.)
|
|
To support this change, replacements were required for system calls
|
|
that deal with file offsets and sizes.
|
|
Thus the following system calls were added:
|
|
.BR fcntl64 (2),
|
|
.BR ftruncate64 (2),
|
|
.BR getdents64 (2),
|
|
.BR stat64 (2),
|
|
.BR statfs64 (2),
|
|
and their analogs that work with file descriptors or
|
|
symbolic links.
|
|
These system calls supersede the older system calls
|
|
which, except in the case of the "stat" calls,
|
|
have the same name without the "64" suffix.
|
|
|
|
On newer platforms that only have 64-bit file access and 32-bit uids
|
|
(e.g., alpha, ia64, s390x) there are no *64 or *32 calls.
|
|
Where the *64 and *32 calls exist, the other versions are obsolete.
|
|
.IP *
|
|
The
|
|
.I rt_sig*
|
|
calls were added in kernel 2.2 to support the addition
|
|
of real-time signals (see
|
|
.BR signal (7)).
|
|
These system calls supersede the older system calls of the same
|
|
name without the "rt_" prefix.
|
|
.IP *
|
|
The
|
|
.BR select (2)
|
|
and
|
|
.BR mmap (2)
|
|
system calls use five or more arguments,
|
|
which caused problems the way
|
|
argument passing on the i386 used to be set up.
|
|
Thus, while other architectures have
|
|
.IR sys_select ()
|
|
and
|
|
.IR sys_mmap ()
|
|
corresponding to
|
|
.I __NR_select
|
|
and
|
|
.IR __NR_mmap ,
|
|
on i386 one finds
|
|
.IR old_select ()
|
|
and
|
|
.IR old_mmap ()
|
|
(routines that use a pointer to a
|
|
argument block) instead.
|
|
These days passing five arguments
|
|
is not a problem any more, and there is a
|
|
.I __NR__newselect
|
|
.\" (used by libc 6)
|
|
that corresponds directly to
|
|
.IR sys_select ()
|
|
and similarly
|
|
.IR __NR_mmap2 .
|
|
.\" .PP
|
|
.\" Two system call numbers,
|
|
.\" .IR __NR__llseek
|
|
.\" and
|
|
.\" .IR __NR__sysctl
|
|
.\" have an additional underscore absent in
|
|
.\" .IR sys_llseek ()
|
|
.\" and
|
|
.\" .IR sys_sysctl ().
|
|
.\"
|
|
.\" In kernel 2.1.81,
|
|
.\" .BR lchown (2)
|
|
.\" and
|
|
.\" .BR chown (2)
|
|
.\" were swapped; that is,
|
|
.\" .BR lchown (2)
|
|
.\" was added with the semantics that were then current for
|
|
.\" .BR chown (2),
|
|
.\" and the semantics of the latter call were changed to what
|
|
.\" they are today.
|
|
.SH SEE ALSO
|
|
.BR syscall (2),
|
|
.BR unimplemented (2),
|
|
.BR libc (7)
|