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