1SYSCALLS(2) Linux Programmer's Manual SYSCALLS(2)
2
3
4
6 syscalls - Linux system calls
7
9 Linux system calls.
10
12 The system call is the fundamental interface between an application and
13 the Linux kernel.
14
15 System calls and library wrapper functions
16 System calls are generally not invoked directly, but rather via wrapper
17 functions in glibc (or perhaps some other library). For details of
18 direct invocation of a system call, see intro(2). Often, but not
19 always, the name of the wrapper function is the same as the name of the
20 system call that it invokes. For example, glibc contains a function
21 chdir() which invokes the underlying "chdir" system call.
22
23 Often the glibc wrapper function is quite thin, doing little work other
24 than copying arguments to the right registers before invoking the sys‐
25 tem call, and then setting errno appropriately after the system call
26 has returned. (These are the same steps that are performed by
27 syscall(2), which can be used to invoke system calls for which no wrap‐
28 per function is provided.) Note: system calls indicate a failure by
29 returning a negative error number to the caller on architectures with‐
30 out a separate error register/flag, as noted in syscall(2); when this
31 happens, the wrapper function negates the returned error number (to
32 make it positive), copies it to errno, and returns -1 to the caller of
33 the wrapper.
34
35 Sometimes, however, the wrapper function does some extra work before
36 invoking the system call. For example, nowadays there are (for reasons
37 described below) two related system calls, truncate(2) and trun‐
38 cate64(2), and the glibc truncate() wrapper function checks which of
39 those system calls are provided by the kernel and determines which
40 should be employed.
41
42 System call list
43 Below is a list of the Linux system calls. In the list, the Kernel
44 column indicates the kernel version for those system calls that were
45 new in Linux 2.2, or have appeared since that kernel version. Note the
46 following points:
47
48 * Where no kernel version is indicated, the system call appeared in
49 kernel 1.0 or earlier.
50
51 * Where a system call is marked "1.2" this means the system call prob‐
52 ably appeared in a 1.1.x kernel version, and first appeared in a
53 stable kernel with 1.2. (Development of the 1.2 kernel was initi‐
54 ated from a branch of kernel 1.0.6 via the 1.1.x unstable kernel
55 series.)
56
57 * Where a system call is marked "2.0" this means the system call prob‐
58 ably appeared in a 1.3.x kernel version, and first appeared in a
59 stable kernel with 2.0. (Development of the 2.0 kernel was initi‐
60 ated from a branch of kernel 1.2.x, somewhere around 1.2.10, via the
61 1.3.x unstable kernel series.)
62
63 * Where a system call is marked "2.2" this means the system call prob‐
64 ably appeared in a 2.1.x kernel version, and first appeared in a
65 stable kernel with 2.2.0. (Development of the 2.2 kernel was initi‐
66 ated from a branch of kernel 2.0.21 via the 2.1.x unstable kernel
67 series.)
68
69 * Where a system call is marked "2.4" this means the system call prob‐
70 ably appeared in a 2.3.x kernel version, and first appeared in a
71 stable kernel with 2.4.0. (Development of the 2.4 kernel was initi‐
72 ated from a branch of kernel 2.2.8 via the 2.3.x unstable kernel
73 series.)
74
75 * Where a system call is marked "2.6" this means the system call prob‐
76 ably appeared in a 2.5.x kernel version, and first appeared in a
77 stable kernel with 2.6.0. (Development of kernel 2.6 was initiated
78 from a branch of kernel 2.4.15 via the 2.5.x unstable kernel
79 series.)
80
81 * Starting with kernel 2.6.0, the development model changed, and new
82 system calls may appear in each 2.6.x release. In this case, the
83 exact version number where the system call appeared is shown. This
84 convention continues with the 3.x kernel series, which followed on
85 from kernel 2.6.39, and the 4.x kernel series, which followed on
86 from kernel 3.19.
87
88 * In some cases, a system call was added to a stable kernel series
89 after it branched from the previous stable kernel series, and then
90 backported into the earlier stable kernel series. For example some
91 system calls that appeared in 2.6.x were also backported into a
92 2.4.x release after 2.4.15. When this is so, the version where the
93 system call appeared in both of the major kernel series is listed.
94
95 The list of system calls that are available as at kernel 4.19 (or in a
96 few cases only on older kernels) is as follows:
97
98 System call Kernel Notes
99 ───────────────────────────────────────────────────────────────────────
100
101 _llseek(2) 1.2
102 _newselect(2) 2.0
103 _sysctl(2) 2.0
104 accept(2) 2.0 See notes on socketcall(2)
105 accept4(2) 2.6.28
106 access(2) 1.0
107 acct(2) 1.0
108 add_key(2) 2.6.10
109 adjtimex(2) 1.0
110 alarm(2) 1.0
111 alloc_hugepages(2) 2.5.36 Removed in 2.5.44
112 arc_gettls(2) 3.9 ARC only
113 arc_settls(2) 3.9 ARC only
114 arc_usr_cmpxchg(2) 4.9 ARC only
115 arch_prctl(2) 2.6 x86_64, x86 since 4.12
116 atomic_barrier(2) 2.6.34 m68k only
117 atomic_cmpxchg_32(2) 2.6.34 m68k only
118 bdflush(2) 1.2 Deprecated (does nothing)
119 since 2.6
120 bfin_spinlock(2) 2.6.22 Blackfin only (port removed
121 in Linux 4.17)
122 bind(2) 2.0 See notes on socketcall(2)
123 bpf(2) 3.18
124 brk(2) 1.0
125 breakpoint(2) 2.2 ARM OABI only, defined with
126 __ARM_NR prefix
127 cacheflush(2) 1.2 Not on x86
128 capget(2) 2.2
129 capset(2) 2.2
130 chdir(2) 1.0
131 chmod(2) 1.0
132
133 chown(2) 2.2 See chown(2) for
134 version details
135 chown32(2) 2.4
136 chroot(2) 1.0
137 clock_adjtime(2) 2.6.39
138 clock_getres(2) 2.6
139 clock_gettime(2) 2.6
140 clock_nanosleep(2) 2.6
141 clock_settime(2) 2.6
142 clone2(2) 2.4 IA-64 only
143 clone(2) 1.0
144 clone3(2) 5.3
145 close(2) 1.0
146 cmpxchg_badaddr(2) 2.6.36 Tile only (port removed
147 in Linux 4.17)
148 connect(2) 2.0 See notes on socketcall(2)
149 copy_file_range(2) 4.5
150 creat(2) 1.0
151 create_module(2) 1.0 Removed in 2.6
152 delete_module(2) 1.0
153 dma_memcpy(2) 2.6.22 Blackfin only (port removed
154 in Linux 4.17)
155 dup(2) 1.0
156 dup2(2) 1.0
157 dup3(2) 2.6.27
158 epoll_create(2) 2.6
159 epoll_create1(2) 2.6.27
160 epoll_ctl(2) 2.6
161 epoll_pwait(2) 2.6.19
162 epoll_wait(2) 2.6
163 eventfd(2) 2.6.22
164 eventfd2(2) 2.6.27
165 execv(2) 2.0 SPARC/SPARC64 only, for
166 compatibility with SunOS
167 execve(2) 1.0
168 execveat(2) 3.19
169 exit(2) 1.0
170 exit_group(2) 2.6
171 faccessat(2) 2.6.16
172 fadvise64(2) 2.6
173 fadvise64_64(2) 2.6
174 fallocate(2) 2.6.23
175 fanotify_init(2) 2.6.37
176 fanotify_mark(2) 2.6.37
177 fchdir(2) 1.0
178 fchmod(2) 1.0
179 fchmodat(2) 2.6.16
180 fchown(2) 1.0
181 fchown32(2) 2.4
182 fchownat(2) 2.6.16
183 fcntl(2) 1.0
184 fcntl64(2) 2.4
185 fdatasync(2) 2.0
186 fgetxattr(2) 2.6; 2.4.18
187 finit_module(2) 3.8
188 flistxattr(2) 2.6; 2.4.18
189 flock(2) 2.0
190 fork(2) 1.0
191 free_hugepages(2) 2.5.36 Removed in 2.5.44
192 fremovexattr(2) 2.6; 2.4.18
193 fsconfig(2) 5.2
194 fsetxattr(2) 2.6; 2.4.18
195 fsmount(2) 5.2
196 fsopen(2) 5.2
197 fspick(2) 5.2
198
199 fstat(2) 1.0
200 fstat64(2) 2.4
201 fstatat64(2) 2.6.16
202 fstatfs(2) 1.0
203 fstatfs64(2) 2.6
204 fsync(2) 1.0
205 ftruncate(2) 1.0
206 ftruncate64(2) 2.4
207 futex(2) 2.6
208 futimesat(2) 2.6.16
209 get_kernel_syms(2) 1.0 Removed in 2.6
210 get_mempolicy(2) 2.6.6
211 get_robust_list(2) 2.6.17
212 get_thread_area(2) 2.6
213 get_tls(2) 4.15 ARM OABI only, has
214 __ARM_NR prefix
215 getcpu(2) 2.6.19
216 getcwd(2) 2.2
217 getdents(2) 2.0
218 getdents64(2) 2.4
219 getdomainname(2) 2.2 SPARC, SPARC64; available
220 as osf_getdomainname(2)
221 on Alpha since Linux 2.0
222 getdtablesize(2) 2.0 SPARC (removed in 2.6.26),
223 available since Linux 2.0 on
224 Alpha as osf_getdtablesize(2)
225 getegid(2) 1.0
226 getegid32(2) 2.4
227 geteuid(2) 1.0
228 geteuid32(2) 2.4
229 getgid(2) 1.0
230 getgid32(2) 2.4
231 getgroups(2) 1.0
232 getgroups32(2) 2.4
233 gethostname(2) 2.0 Alpha, was available on
234 SPARC up to Linux 2.6.26
235 getitimer(2) 1.0
236 getpeername(2) 2.0 See notes on socketcall(2)
237 getpagesize(2) 2.0 Not on x86
238 getpgid(2) 1.0
239 getpgrp(2) 1.0
240 getpid(2) 1.0
241 getppid(2) 1.0
242 getpriority(2) 1.0
243 getrandom(2) 3.17
244 getresgid(2) 2.2
245 getresgid32(2) 2.4
246 getresuid(2) 2.2
247 getresuid32(2) 2.4
248 getrlimit(2) 1.0
249 getrusage(2) 1.0
250 getsid(2) 2.0
251 getsockname(2) 2.0 See notes on socketcall(2)
252 getsockopt(2) 2.0 See notes on socketcall(2)
253 gettid(2) 2.4.11
254 gettimeofday(2) 1.0
255 getuid(2) 1.0
256 getuid32(2) 2.4
257 getunwind(2) 2.4.8 IA-64 only; deprecated
258 getxattr(2) 2.6; 2.4.18
259 getxgid(2) 2.0 Alpha only; see NOTES
260 getxpid(2) 2.0 Alpha only; see NOTES
261 getxuid(2) 2.0 Alpha only; see NOTES
262 init_module(2) 1.0
263 inotify_add_watch(2) 2.6.13
264
265 inotify_init(2) 2.6.13
266 inotify_init1(2) 2.6.27
267 inotify_rm_watch(2) 2.6.13
268 io_cancel(2) 2.6
269 io_destroy(2) 2.6
270 io_getevents(2) 2.6
271 io_pgetevents(2) 4.18
272 io_setup(2) 2.6
273 io_submit(2) 2.6
274 io_uring_enter(2) 5.1
275 io_uring_register(2) 5.1
276 io_uring_setup(2) 5.1
277 ioctl(2) 1.0
278 ioperm(2) 1.0
279 iopl(2) 1.0
280 ioprio_get(2) 2.6.13
281 ioprio_set(2) 2.6.13
282 ipc(2) 1.0
283 kcmp(2) 3.5
284 kern_features(2) 3.7 SPARC64 only
285 kexec_file_load(2) 3.17
286 kexec_load(2) 2.6.13
287 keyctl(2) 2.6.10
288 kill(2) 1.0
289 lchown(2) 1.0 See chown(2) for
290 version details
291 lchown32(2) 2.4
292 lgetxattr(2) 2.6; 2.4.18
293 link(2) 1.0
294 linkat(2) 2.6.16
295 listen(2) 2.0 See notes on socketcall(2)
296 listxattr(2) 2.6; 2.4.18
297 llistxattr(2) 2.6; 2.4.18
298 lookup_dcookie(2) 2.6
299 lremovexattr(2) 2.6; 2.4.18
300 lseek(2) 1.0
301 lsetxattr(2) 2.6; 2.4.18
302 lstat(2) 1.0
303 lstat64(2) 2.4
304 madvise(2) 2.4
305 mbind(2) 2.6.6
306 memory_ordering(2) 2.2 SPARC64 only
307 metag_get_tls(2) 3.9 Metag only (port removed
308 in Linux 4.17)
309 metag_set_fpu_flags(2) 3.9 Metag only (port removed
310 in Linux 4.17)
311 metag_set_tls(2) 3.9 Metag only (port removed
312 in Linux 4.17)
313 metag_setglobalbit(2) 3.9 Metag only (port removed
314 in Linux 4.17)
315 membarrier(2) 3.17
316 memfd_create(2) 3.17
317 migrate_pages(2) 2.6.16
318 mincore(2) 2.4
319 mkdir(2) 1.0
320 mkdirat(2) 2.6.16
321 mknod(2) 1.0
322 mknodat(2) 2.6.16
323 mlock(2) 2.0
324 mlock2(2) 4.4
325 mlockall(2) 2.0
326 mmap(2) 1.0
327 mmap2(2) 2.4
328 modify_ldt(2) 1.0
329 mount(2) 1.0
330
331 move_mount(2) 5.2
332 move_pages(2) 2.6.18
333 mprotect(2) 1.0
334 mq_getsetattr(2) 2.6.6
335 mq_notify(2) 2.6.6
336 mq_open(2) 2.6.6
337 mq_timedreceive(2) 2.6.6
338 mq_timedsend(2) 2.6.6
339 mq_unlink(2) 2.6.6
340 mremap(2) 2.0
341 msgctl(2) 2.0 See notes on ipc(2)
342 msgget(2) 2.0 See notes on ipc(2)
343 msgrcv(2) 2.0 See notes on ipc(2)
344 msgsnd(2) 2.0 See notes on ipc(2)
345 msync(2) 2.0
346 munlock(2) 2.0
347 munlockall(2) 2.0
348 munmap(2) 1.0
349 name_to_handle_at(2) 2.6.39
350 nanosleep(2) 2.0
351 newfstatat(2) 2.6.16 See stat(2)
352 nfsservctl(2) 2.2 Removed in 3.1
353 nice(2) 1.0
354 old_adjtimex(2) 2.0 Alpha only; see NOTES
355 old_getrlimit(2) 2.4 Old variant of getrlimit(2)
356 that used a different value
357 for RLIM_INFINITY
358 oldfstat(2) 1.0
359 oldlstat(2) 1.0
360 oldolduname(2) 1.0
361 oldstat(2) 1.0
362 oldumount(2) 2.4.116 Name of the old umount(2)
363 syscall on Alpha
364 olduname(2) 1.0
365 open(2) 1.0
366 open_by_handle_at(2) 2.6.39
367 open_tree(2) 5.2
368 openat(2) 2.6.16
369 or1k_atomic(2) 3.1 OpenRISC 1000 only
370 pause(2) 1.0
371 pciconfig_iobase(2) 2.2.15; 2.4 Not on x86
372 pciconfig_read(2) 2.0.26; 2.2 Not on x86
373 pciconfig_write(2) 2.0.26; 2.2 Not on x86
374 perf_event_open(2) 2.6.31 Was perf_counter_open() in
375 2.6.31; renamed in 2.6.32
376 personality(2) 1.2
377 perfctr(2) 2.2 SPARC only; removed in 2.6.34
378 perfmonctl(2) 2.4 IA-64 only
379 pidfd_send_signal(2) 5.1
380 pidfd_open(2) 5.3
381 pipe(2) 1.0
382 pipe2(2) 2.6.27
383 pivot_root(2) 2.4
384 pkey_alloc(2) 4.8
385 pkey_free(2) 4.8
386 pkey_mprotect(2) 4.8
387 poll(2) 2.0.36; 2.2
388 ppoll(2) 2.6.16
389 prctl(2) 2.2
390 pread(2) Used for pread64(2) on AVR32
391 (port removed in Linux 4.12)
392 and Blackfin (port removed
393 in Linux 4.17)
394 pread64(2) Added as "pread" in 2.2;
395 renamed "pread64" in 2.6
396
397 preadv(2) 2.6.30
398 preadv2(2) 4.6
399 prlimit64(2) 2.6.36
400 process_vm_readv(2) 3.2
401 process_vm_writev(2) 3.2
402 pselect6(2) 2.6.16
403 ptrace(2) 1.0
404 pwrite(2) Used for pwrite64(2) on AVR32
405 (port removed in Linux 4.12)
406 and Blackfin (port removed in
407 Linux 4.17)
408 pwrite64(2) Added as "pwrite" in 2.2;
409 renamed "pwrite64" in 2.6
410 pwritev(2) 2.6.30
411 pwritev2(2) 4.6
412 query_module(2) 2.2 Removed in 2.6
413 quotactl(2) 1.0
414 read(2) 1.0
415 readahead(2) 2.4.13
416 readdir(2) 1.0
417 readlink(2) 1.0
418 readlinkat(2) 2.6.16
419 readv(2) 2.0
420 reboot(2) 1.0
421 recv(2) 2.0 See notes on socketcall(2)
422 recvfrom(2) 2.0 See notes on socketcall(2)
423 recvmsg(2) 2.0 See notes on socketcall(2)
424 recvmmsg(2) 2.6.33
425 remap_file_pages(2) 2.6 Deprecated since 3.16
426 removexattr(2) 2.6; 2.4.18
427 rename(2) 1.0
428 renameat(2) 2.6.16
429 renameat2(2) 3.15
430 request_key(2) 2.6.10
431 restart_syscall(2) 2.6
432 riscv_flush_icache(2) 4.15 RISC-V only
433 rmdir(2) 1.0
434 rseq(2) 4.18
435 rt_sigaction(2) 2.2
436 rt_sigpending(2) 2.2
437 rt_sigprocmask(2) 2.2
438 rt_sigqueueinfo(2) 2.2
439 rt_sigreturn(2) 2.2
440 rt_sigsuspend(2) 2.2
441 rt_sigtimedwait(2) 2.2
442 rt_tgsigqueueinfo(2) 2.6.31
443 rtas(2) 2.6.2 PowerPC/PowerPC64 only
444 s390_runtime_instr(2) 3.7 s390 only
445 s390_pci_mmio_read(2) 3.19 s390 only
446 s390_pci_mmio_write(2) 3.19 s390 only
447 s390_sthyi(2) 4.15 s390 only
448 s390_guarded_storage(2) 4.12 s390 only
449 sched_get_affinity(2) 2.6 Name of sched_getaffinity(2)
450 on SPARC and SPARC64
451 sched_get_priority_max(2) 2.0
452 sched_get_priority_min(2) 2.0
453 sched_getaffinity(2) 2.6
454 sched_getattr(2) 3.14
455 sched_getparam(2) 2.0
456 sched_getscheduler(2) 2.0
457 sched_rr_get_interval(2) 2.0
458 sched_set_affinity(2) 2.6 Name of sched_setaffinity(2)
459 on SPARC and SPARC64
460 sched_setaffinity(2) 2.6
461 sched_setattr(2) 3.14
462
463 sched_setparam(2) 2.0
464 sched_setscheduler(2) 2.0
465 sched_yield(2) 2.0
466 seccomp(2) 3.17
467 select(2) 1.0
468 semctl(2) 2.0 See notes on ipc(2)
469 semget(2) 2.0 See notes on ipc(2)
470 semop(2) 2.0 See notes on ipc(2)
471 semtimedop(2) 2.6; 2.4.22
472 send(2) 2.0 See notes on socketcall(2)
473 sendfile(2) 2.2
474 sendfile64(2) 2.6; 2.4.19
475 sendmmsg(2) 3.0
476 sendmsg(2) 2.0 See notes on socketcall(2)
477 sendto(2) 2.0 See notes on socketcall(2)
478 set_mempolicy(2) 2.6.6
479 set_robust_list(2) 2.6.17
480 set_thread_area(2) 2.6
481 set_tid_address(2) 2.6
482 set_tls(2) 2.6.11 ARM OABI/EABI only (constant
483 has __ARM_NR prefix)
484 setdomainname(2) 1.0
485 setfsgid(2) 1.2
486 setfsgid32(2) 2.4
487 setfsuid(2) 1.2
488 setfsuid32(2) 2.4
489 setgid(2) 1.0
490 setgid32(2) 2.4
491 setgroups(2) 1.0
492 setgroups32(2) 2.4
493 sethae(2) 2.0 Alpha only; see NOTES
494 sethostname(2) 1.0
495 setitimer(2) 1.0
496 setns(2) 3.0
497 setpgid(2) 1.0
498 setpgrp(2) 2.0 Alternative name for
499 setpgid(2) on Alpha
500 setpriority(2) 1.0
501 setregid(2) 1.0
502 setregid32(2) 2.4
503 setresgid(2) 2.2
504 setresgid32(2) 2.4
505 setresuid(2) 2.2
506 setresuid32(2) 2.4
507 setreuid(2) 1.0
508 setreuid32(2) 2.4
509 setrlimit(2) 1.0
510 setsid(2) 1.0
511 setsockopt(2) 2.0 See notes on socketcall(2)
512 settimeofday(2) 1.0
513 setuid(2) 1.0
514 setuid32(2) 2.4
515 setup(2) 1.0 Removed in 2.2
516 setxattr(2) 2.6; 2.4.18
517 sgetmask(2) 1.0
518 shmat(2) 2.0 See notes on ipc(2)
519 shmctl(2) 2.0 See notes on ipc(2)
520 shmdt(2) 2.0 See notes on ipc(2)
521 shmget(2) 2.0 See notes on ipc(2)
522 shutdown(2) 2.0 See notes on socketcall(2)
523 sigaction(2) 1.0
524 sigaltstack(2) 2.2
525 signal(2) 1.0
526 signalfd(2) 2.6.22
527 signalfd4(2) 2.6.27
528
529 sigpending(2) 1.0
530 sigprocmask(2) 1.0
531 sigreturn(2) 1.0
532 sigsuspend(2) 1.0
533 socket(2) 2.0 See notes on socketcall(2)
534 socketcall(2) 1.0
535 socketpair(2) 2.0 See notes on socketcall(2)
536 spill(2) 2.6.13 Xtensa only
537 splice(2) 2.6.17
538 spu_create(2) 2.6.16 PowerPC/PowerPC64 only
539 spu_run(2) 2.6.16 PowerPC/PowerPC64 only
540 sram_alloc(2) 2.6.22 Blackfin (port removed
541 in Linux 4.17)
542 sram_free(2) 2.6.22 Blackfin (port removed
543 in Linux 4.17)
544 ssetmask(2) 1.0
545 stat(2) 1.0
546 stat64(2) 2.4
547 statfs(2) 1.0
548 statfs64(2) 2.6
549 statx(2) 4.11
550 stime(2) 1.0
551 subpage_prot(2) 2.6.25 PowerPC/PowerPC64 only
552 swapcontext(2) 2.6.3 PowerPC/PowerPC64 only
553 switch_endian(2) 4.1 PowerPC64 only
554 swapcontext(2) 2.6.3 PowerPC only
555 swapoff(2) 1.0
556 swapon(2) 1.0
557 symlink(2) 1.0
558 symlinkat(2) 2.6.16
559 sync(2) 1.0
560 sync_file_range(2) 2.6.17
561 sync_file_range2(2) 2.6.22
562 syncfs(2) 2.6.39
563 sys_debug_setcontext(2) 2.6.11 PowerPC only
564 syscall(2) 1.0 Still available on ARM OABI
565 and MIPS O32 ABI
566 sysfs(2) 1.2
567 sysinfo(2) 1.0
568 syslog(2) 1.0
569 sysmips(2) 2.6.0 MIPS only
570 tee(2) 2.6.17
571 tgkill(2) 2.6
572 time(2) 1.0
573 timer_create(2) 2.6
574 timer_delete(2) 2.6
575 timer_getoverrun(2) 2.6
576 timer_gettime(2) 2.6
577 timer_settime(2) 2.6
578 timerfd_create(2) 2.6.25
579 timerfd_gettime(2) 2.6.25
580 timerfd_settime(2) 2.6.25
581 times(2) 1.0
582 tkill(2) 2.6; 2.4.22
583 truncate(2) 1.0
584 truncate64(2) 2.4
585 ugetrlimit(2) 2.4
586 umask(2) 1.0
587 umount(2) 1.0
588 umount2(2) 2.2
589 uname(2) 1.0
590 unlink(2) 1.0
591 unlinkat(2) 2.6.16
592 unshare(2) 2.6.16
593 uselib(2) 1.0
594
595 ustat(2) 1.0
596 userfaultfd(2) 4.3
597 usr26(2) 2.4.8.1 ARM OABI only
598 usr32(2) 2.4.8.1 ARM OABI only
599 utime(2) 1.0
600 utimensat(2) 2.6.22
601 utimes(2) 2.2
602 utrap_install(2) 2.2 SPARC64 only
603 vfork(2) 2.2
604 vhangup(2) 1.0
605 vm86old(2) 1.0 Was "vm86"; renamed in
606 2.0.28/2.2
607 vm86(2) 2.0.28; 2.2
608 vmsplice(2) 2.6.17
609 wait4(2) 1.0
610 waitid(2) 2.6.10
611 waitpid(2) 1.0
612 write(2) 1.0
613 writev(2) 2.0
614 xtensa(2) 2.6.13 Xtensa only
615
616 On many platforms, including x86-32, socket calls are all multiplexed
617 (via glibc wrapper functions) through socketcall(2) and similarly Sys‐
618 tem V IPC calls are multiplexed through ipc(2).
619
620 Although slots are reserved for them in the system call table, the fol‐
621 lowing system calls are not implemented in the standard kernel:
622 afs_syscall(2), break(2), ftime(2), getpmsg(2), gtty(2), idle(2),
623 lock(2), madvise1(2), mpx(2), phys(2), prof(2), profil(2), putpmsg(2),
624 security(2), stty(2), tuxcall(2), ulimit(2), and vserver(2) (see also
625 unimplemented(2)). However, ftime(3), profil(3), and ulimit(3) exist
626 as library routines. The slot for phys(2) is in use since kernel
627 2.1.116 for umount(2); phys(2) will never be implemented. The
628 getpmsg(2) and putpmsg(2) calls are for kernels patched to support
629 STREAMS, and may never be in the standard kernel.
630
631 There was briefly set_zone_reclaim(2), added in Linux 2.6.13, and
632 removed in 2.6.16; this system call was never available to user space.
633
635 Roughly speaking, the code belonging to the system call with number
636 __NR_xxx defined in /usr/include/asm/unistd.h can be found in the Linux
637 kernel source in the routine sys_xxx(). There are many exceptions,
638 however, mostly because older system calls were superseded by newer
639 ones, and this has been treated somewhat unsystematically. On plat‐
640 forms with proprietary operating-system emulation, such as sparc,
641 sparc64, and alpha, there are many additional system calls; mips64 also
642 contains a full set of 32-bit system calls.
643
644 Over time, changes to the interfaces of some system calls have been
645 necessary. One reason for such changes was the need to increase the
646 size of structures or scalar values passed to the system call. Because
647 of these changes, certain architectures (notably, longstanding 32-bit
648 architectures such as i386) now have various groups of related system
649 calls (e.g., truncate(2) and truncate64(2)) which perform similar
650 tasks, but which vary in details such as the size of their arguments.
651 (As noted earlier, applications are generally unaware of this: the
652 glibc wrapper functions do some work to ensure that the right system
653 call is invoked, and that ABI compatibility is preserved for old bina‐
654 ries.) Examples of systems calls that exist in multiple versions are
655 the following:
656
657 * By now there are three different versions of stat(2): sys_stat()
658 (slot __NR_oldstat), sys_newstat() (slot __NR_stat), and
659 sys_stat64() (slot __NR_stat64), with the last being the most cur‐
660 rent. A similar story applies for lstat(2) and fstat(2).
661
662 * Similarly, the defines __NR_oldolduname, __NR_olduname, and
663 __NR_uname refer to the routines sys_olduname(), sys_uname() and
664 sys_newuname().
665
666 * In Linux 2.0, a new version of vm86(2) appeared, with the old and
667 the new kernel routines being named sys_vm86old() and sys_vm86().
668
669 * In Linux 2.4, a new version of getrlimit(2) appeared, with the old
670 and the new kernel routines being named sys_old_getrlimit() (slot
671 __NR_getrlimit) and sys_getrlimit() (slot __NR_ugetrlimit).
672
673 * Linux 2.4 increased the size of user and group IDs from 16 to 32
674 bits. To support this change, a range of system calls were added
675 (e.g., chown32(2), getuid32(2), getgroups32(2), setresuid32(2)),
676 superseding earlier calls of the same name without the "32" suffix.
677
678 * Linux 2.4 added support for applications on 32-bit architectures to
679 access large files (i.e., files for which the sizes and file offsets
680 can't be represented in 32 bits.) To support this change, replace‐
681 ments were required for system calls that deal with file offsets and
682 sizes. Thus the following system calls were added: fcntl64(2), get‐
683 dents64(2), stat64(2), statfs64(2), truncate64(2), and their analogs
684 that work with file descriptors or symbolic links. These system
685 calls supersede the older system calls which, except in the case of
686 the "stat" calls, have the same name without the "64" suffix.
687
688 On newer platforms that only have 64-bit file access and 32-bit
689 UIDs/GIDs (e.g., alpha, ia64, s390x, x86-64), there is just a single
690 version of the UID/GID and file access system calls. On platforms
691 (typically, 32-bit platforms) where the *64 and *32 calls exist, the
692 other versions are obsolete.
693
694 * The rt_sig* calls were added in kernel 2.2 to support the addition
695 of real-time signals (see signal(7)). These system calls supersede
696 the older system calls of the same name without the "rt_" prefix.
697
698 * The select(2) and mmap(2) system calls use five or more arguments,
699 which caused problems in the way argument passing on the i386 used
700 to be set up. Thus, while other architectures have sys_select() and
701 sys_mmap() corresponding to __NR_select and __NR_mmap, on i386 one
702 finds old_select() and old_mmap() (routines that use a pointer to an
703 argument block) instead. These days passing five arguments is not a
704 problem any more, and there is a __NR__newselect that corresponds
705 directly to sys_select() and similarly __NR_mmap2. s390x is the
706 only 64-bit architecture that has old_mmap().
707
708 Architecture-specific details: Alpha
709 * getxgid(2) returns a pair of GID and effective GID via registers r0
710 and r20; it is provided instead of getgid(2) and getegid(2).
711
712 * getxpid(2) returns a pair of PID and parent PID via registers r0 and
713 r20; it is provided instead of getpid(2) and getppid(2).
714
715 * old_adjtimex(2) is a variant of adjtimex(2) that uses struct
716 timeval32, for compatibility with OSF/1.
717
718 * getxuid(2) returns a pair of GID and effective GID via registers r0
719 and r20; it is provided instead of getuid(2) and geteuid(2).
720
721 * sethae(2) is used for configuring the Host Address Extension regis‐
722 ter on low-cost Alphas in order to access address space beyond first
723 27 bits.
724
726 intro(2), syscall(2), unimplemented(2), errno(3), libc(7), vdso(7)
727
729 This page is part of release 5.04 of the Linux man-pages project. A
730 description of the project, information about reporting bugs, and the
731 latest version of this page, can be found at
732 https://www.kernel.org/doc/man-pages/.
733
734
735
736Linux 2019-10-10 SYSCALLS(2)