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 lchown(2) 1.0 See chown(2) for version
289 details
290 lchown32(2) 2.4
291 lgetxattr(2) 2.6; 2.4.18
292 link(2) 1.0
293 linkat(2) 2.6.16
294 listen(2) 2.0 See notes on socketcall(2)
295 listxattr(2) 2.6; 2.4.18
296 llistxattr(2) 2.6; 2.4.18
297 lookup_dcookie(2) 2.6
298 lremovexattr(2) 2.6; 2.4.18
299 lseek(2) 1.0
300 lsetxattr(2) 2.6; 2.4.18
301 lstat(2) 1.0
302 lstat64(2) 2.4
303 madvise(2) 2.4
304 mbind(2) 2.6.6
305 memory_ordering(2) 2.2 SPARC64 only
306 membarrier(2) 3.17
307 memfd_create(2) 3.17
308 migrate_pages(2) 2.6.16
309 mincore(2) 2.4
310 mkdir(2) 1.0
311 mkdirat(2) 2.6.16
312 mknod(2) 1.0
313 mknodat(2) 2.6.16
314 mlock(2) 2.0
315 mlock2(2) 4.4
316 mlockall(2) 2.0
317 mmap(2) 1.0
318 mmap2(2) 2.4
319 modify_ldt(2) 1.0
320 mount(2) 1.0
321 move_mount(2) 5.2
322 move_pages(2) 2.6.18
323 mprotect(2) 1.0
324 mq_getsetattr(2) 2.6.6
325 mq_notify(2) 2.6.6
326 mq_open(2) 2.6.6
327 mq_timedreceive(2) 2.6.6
328 mq_timedsend(2) 2.6.6
329 mq_unlink(2) 2.6.6
330
331 mremap(2) 2.0
332 msgctl(2) 2.0 See notes on ipc(2)
333 msgget(2) 2.0 See notes on ipc(2)
334 msgrcv(2) 2.0 See notes on ipc(2)
335 msgsnd(2) 2.0 See notes on ipc(2)
336 msync(2) 2.0
337 munlock(2) 2.0
338 munlockall(2) 2.0
339 munmap(2) 1.0
340 name_to_handle_at(2) 2.6.39
341 nanosleep(2) 2.0
342 newfstatat(2) 2.6.16 See stat(2)
343 nfsservctl(2) 2.2 Removed in 3.1
344 nice(2) 1.0
345 old_adjtimex(2) 2.0 Alpha only; see NOTES
346 old_getrlimit(2) 2.4 Old variant of getrlimit(2)
347 that used a different value
348 for RLIM_INFINITY
349 oldfstat(2) 1.0
350 oldlstat(2) 1.0
351 oldolduname(2) 1.0
352 oldstat(2) 1.0
353 oldumount(2) 2.4.116 Name of the old umount(2)
354 syscall on Alpha
355 olduname(2) 1.0
356 open(2) 1.0
357 open_by_handle_at(2) 2.6.39
358 open_tree(2) 5.2
359 openat(2) 2.6.16
360 openat2(2) 5.6
361 or1k_atomic(2) 3.1 OpenRISC 1000 only
362 pause(2) 1.0
363 pciconfig_iobase(2) 2.2.15; 2.4 Not on x86
364 pciconfig_read(2) 2.0.26; 2.2 Not on x86
365 pciconfig_write(2) 2.0.26; 2.2 Not on x86
366 perf_event_open(2) 2.6.31 Was perf_counter_open() in
367 2.6.31; renamed in 2.6.32
368 personality(2) 1.2
369 perfctr(2) 2.2 SPARC only; removed in
370 2.6.34
371 perfmonctl(2) 2.4 IA-64 only; removed in 5.10
372 pidfd_getfd(2) 5.6
373 pidfd_send_signal(2) 5.1
374 pidfd_open(2) 5.3
375 pipe(2) 1.0
376 pipe2(2) 2.6.27
377 pivot_root(2) 2.4
378 pkey_alloc(2) 4.8
379 pkey_free(2) 4.8
380 pkey_mprotect(2) 4.8
381 poll(2) 2.0.36; 2.2
382 ppoll(2) 2.6.16
383 prctl(2) 2.2
384 pread64(2) Added as "pread" in 2.2;
385 renamed "pread64" in 2.6
386 preadv(2) 2.6.30
387 preadv2(2) 4.6
388 prlimit64(2) 2.6.36
389 process_madvise(2) 5.10
390 process_vm_readv(2) 3.2
391 process_vm_writev(2) 3.2
392 pselect6(2) 2.6.16
393 ptrace(2) 1.0
394 pwrite64(2) Added as "pwrite" in 2.2;
395 renamed "pwrite64" in 2.6
396
397 pwritev(2) 2.6.30
398 pwritev2(2) 4.6
399 query_module(2) 2.2 Removed in 2.6
400 quotactl(2) 1.0
401 read(2) 1.0
402 readahead(2) 2.4.13
403 readdir(2) 1.0
404 readlink(2) 1.0
405 readlinkat(2) 2.6.16
406 readv(2) 2.0
407 reboot(2) 1.0
408 recv(2) 2.0 See notes on socketcall(2)
409 recvfrom(2) 2.0 See notes on socketcall(2)
410 recvmsg(2) 2.0 See notes on socketcall(2)
411 recvmmsg(2) 2.6.33
412 remap_file_pages(2) 2.6 Deprecated since 3.16
413 removexattr(2) 2.6; 2.4.18
414 rename(2) 1.0
415 renameat(2) 2.6.16
416 renameat2(2) 3.15
417 request_key(2) 2.6.10
418 restart_syscall(2) 2.6
419 riscv_flush_icache(2) 4.15 RISC-V only
420 rmdir(2) 1.0
421 rseq(2) 4.18
422 rt_sigaction(2) 2.2
423 rt_sigpending(2) 2.2
424 rt_sigprocmask(2) 2.2
425 rt_sigqueueinfo(2) 2.2
426 rt_sigreturn(2) 2.2
427 rt_sigsuspend(2) 2.2
428 rt_sigtimedwait(2) 2.2
429 rt_tgsigqueueinfo(2) 2.6.31
430 rtas(2) 2.6.2 PowerPC/PowerPC64 only
431 s390_runtime_instr(2) 3.7 s390 only
432 s390_pci_mmio_read(2) 3.19 s390 only
433 s390_pci_mmio_write(2) 3.19 s390 only
434 s390_sthyi(2) 4.15 s390 only
435 s390_guarded_storage(2) 4.12 s390 only
436 sched_get_affinity(2) 2.6 Name of
437 sched_getaffinity(2) on
438 SPARC and SPARC64
439 sched_get_priority_max(2) 2.0
440 sched_get_priority_min(2) 2.0
441 sched_getaffinity(2) 2.6
442 sched_getattr(2) 3.14
443 sched_getparam(2) 2.0
444 sched_getscheduler(2) 2.0
445 sched_rr_get_interval(2) 2.0
446 sched_set_affinity(2) 2.6 Name of
447 sched_setaffinity(2) on
448 SPARC and SPARC64
449 sched_setaffinity(2) 2.6
450 sched_setattr(2) 3.14
451 sched_setparam(2) 2.0
452 sched_setscheduler(2) 2.0
453 sched_yield(2) 2.0
454 seccomp(2) 3.17
455 select(2) 1.0
456 semctl(2) 2.0 See notes on ipc(2)
457 semget(2) 2.0 See notes on ipc(2)
458 semop(2) 2.0 See notes on ipc(2)
459 semtimedop(2) 2.6; 2.4.22
460 send(2) 2.0 See notes on socketcall(2)
461 sendfile(2) 2.2
462
463 sendfile64(2) 2.6; 2.4.19
464 sendmmsg(2) 3.0
465 sendmsg(2) 2.0 See notes on socketcall(2)
466 sendto(2) 2.0 See notes on socketcall(2)
467 set_mempolicy(2) 2.6.6
468 set_robust_list(2) 2.6.17
469 set_thread_area(2) 2.6
470 set_tid_address(2) 2.6
471 set_tls(2) 2.6.11 ARM OABI/EABI only
472 (constant has __ARM_NR
473 prefix)
474 setdomainname(2) 1.0
475 setfsgid(2) 1.2
476 setfsgid32(2) 2.4
477 setfsuid(2) 1.2
478 setfsuid32(2) 2.4
479 setgid(2) 1.0
480 setgid32(2) 2.4
481 setgroups(2) 1.0
482 setgroups32(2) 2.4
483 sethae(2) 2.0 Alpha only; see NOTES
484 sethostname(2) 1.0
485 setitimer(2) 1.0
486 setns(2) 3.0
487 setpgid(2) 1.0
488 setpgrp(2) 2.0 Alternative name for
489 setpgid(2) on Alpha
490 setpriority(2) 1.0
491 setregid(2) 1.0
492 setregid32(2) 2.4
493 setresgid(2) 2.2
494 setresgid32(2) 2.4
495 setresuid(2) 2.2
496 setresuid32(2) 2.4
497 setreuid(2) 1.0
498 setreuid32(2) 2.4
499 setrlimit(2) 1.0
500 setsid(2) 1.0
501 setsockopt(2) 2.0 See notes on socketcall(2)
502 settimeofday(2) 1.0
503 setuid(2) 1.0
504 setuid32(2) 2.4
505 setup(2) 1.0 Removed in 2.2
506 setxattr(2) 2.6; 2.4.18
507 sgetmask(2) 1.0
508 shmat(2) 2.0 See notes on ipc(2)
509 shmctl(2) 2.0 See notes on ipc(2)
510 shmdt(2) 2.0 See notes on ipc(2)
511 shmget(2) 2.0 See notes on ipc(2)
512 shutdown(2) 2.0 See notes on socketcall(2)
513 sigaction(2) 1.0
514 sigaltstack(2) 2.2
515 signal(2) 1.0
516 signalfd(2) 2.6.22
517 signalfd4(2) 2.6.27
518 sigpending(2) 1.0
519 sigprocmask(2) 1.0
520 sigreturn(2) 1.0
521 sigsuspend(2) 1.0
522 socket(2) 2.0 See notes on socketcall(2)
523 socketcall(2) 1.0
524 socketpair(2) 2.0 See notes on socketcall(2)
525 spill(2) 2.6.13 Xtensa only
526 splice(2) 2.6.17
527 spu_create(2) 2.6.16 PowerPC/PowerPC64 only
528
529 spu_run(2) 2.6.16 PowerPC/PowerPC64 only
530 ssetmask(2) 1.0
531 stat(2) 1.0
532 stat64(2) 2.4
533 statfs(2) 1.0
534 statfs64(2) 2.6
535 statx(2) 4.11
536 stime(2) 1.0
537 subpage_prot(2) 2.6.25 PowerPC/PowerPC64 only
538 swapcontext(2) 2.6.3 PowerPC/PowerPC64 only
539 switch_endian(2) 4.1 PowerPC64 only
540 swapoff(2) 1.0
541 swapon(2) 1.0
542 symlink(2) 1.0
543 symlinkat(2) 2.6.16
544 sync(2) 1.0
545 sync_file_range(2) 2.6.17
546 sync_file_range2(2) 2.6.22
547 syncfs(2) 2.6.39
548 sys_debug_setcontext(2) 2.6.11 PowerPC only
549 syscall(2) 1.0 Still available on ARM OABI
550 and MIPS O32 ABI
551 sysfs(2) 1.2
552 sysinfo(2) 1.0
553 syslog(2) 1.0
554 sysmips(2) 2.6.0 MIPS only
555 tee(2) 2.6.17
556 tgkill(2) 2.6
557 time(2) 1.0
558 timer_create(2) 2.6
559 timer_delete(2) 2.6
560 timer_getoverrun(2) 2.6
561 timer_gettime(2) 2.6
562 timer_settime(2) 2.6
563 timerfd_create(2) 2.6.25
564 timerfd_gettime(2) 2.6.25
565 timerfd_settime(2) 2.6.25
566 times(2) 1.0
567 tkill(2) 2.6; 2.4.22
568 truncate(2) 1.0
569 truncate64(2) 2.4
570 ugetrlimit(2) 2.4
571 umask(2) 1.0
572 umount(2) 1.0
573 umount2(2) 2.2
574 uname(2) 1.0
575 unlink(2) 1.0
576 unlinkat(2) 2.6.16
577 unshare(2) 2.6.16
578 uselib(2) 1.0
579 ustat(2) 1.0
580 userfaultfd(2) 4.3
581 usr26(2) 2.4.8.1 ARM OABI only
582 usr32(2) 2.4.8.1 ARM OABI only
583 utime(2) 1.0
584 utimensat(2) 2.6.22
585 utimes(2) 2.2
586 utrap_install(2) 2.2 SPARC64 only
587 vfork(2) 2.2
588 vhangup(2) 1.0
589 vm86old(2) 1.0 Was "vm86"; renamed in
590 2.0.28/2.2
591 vm86(2) 2.0.28; 2.2
592 vmsplice(2) 2.6.17
593 wait4(2) 1.0
594
595 waitid(2) 2.6.10
596 waitpid(2) 1.0
597 write(2) 1.0
598 writev(2) 2.0
599 xtensa(2) 2.6.13 Xtensa only
600
601 On many platforms, including x86-32, socket calls are all multiplexed
602 (via glibc wrapper functions) through socketcall(2) and similarly Sys‐
603 tem V IPC calls are multiplexed through ipc(2).
604
605 Although slots are reserved for them in the system call table, the fol‐
606 lowing system calls are not implemented in the standard kernel:
607 afs_syscall(2), break(2), ftime(2), getpmsg(2), gtty(2), idle(2),
608 lock(2), madvise1(2), mpx(2), phys(2), prof(2), profil(2), putpmsg(2),
609 security(2), stty(2), tuxcall(2), ulimit(2), and vserver(2) (see also
610 unimplemented(2)). However, ftime(3), profil(3), and ulimit(3) exist
611 as library routines. The slot for phys(2) is in use since kernel
612 2.1.116 for umount(2); phys(2) will never be implemented. The
613 getpmsg(2) and putpmsg(2) calls are for kernels patched to support
614 STREAMS, and may never be in the standard kernel.
615
616 There was briefly set_zone_reclaim(2), added in Linux 2.6.13, and re‐
617 moved in 2.6.16; this system call was never available to user space.
618
619 System calls on removed ports
620 Some system calls only ever existed on Linux architectures that have
621 since been removed from the kernel:
622
623 AVR32 (port removed in Linux 4.12)
624 * pread(2)
625 * pwrite(2)
626
627 Blackfin (port removed in Linux 4.17)
628 * bfin_spinlock(2) (added in Linux 2.6.22)
629 * dma_memcpy(2) (added in Linux 2.6.22)
630 * pread(2) (added in Linux 2.6.22)
631 * pwrite(2) (added in Linux 2.6.22)
632 * sram_alloc(2) (added in Linux 2.6.22)
633 * sram_free(2) (added in Linux 2.6.22)
634
635 Metag (port removed in Linux 4.17)
636 * metag_get_tls(2) (add in Linux 3.9)
637 * metag_set_fpu_flags(2) (add in Linux 3.9)
638 * metag_set_tls(2) (add in Linux 3.9)
639 * metag_setglobalbit(2) (add in Linux 3.9)
640
641 Tile (port removed in Linux 4.17)
642 * cmpxchg_badaddr(2) (added in Linux 2.6.36)
643
645 Roughly speaking, the code belonging to the system call with number
646 __NR_xxx defined in /usr/include/asm/unistd.h can be found in the Linux
647 kernel source in the routine sys_xxx(). There are many exceptions,
648 however, mostly because older system calls were superseded by newer
649 ones, and this has been treated somewhat unsystematically. On plat‐
650 forms with proprietary operating-system emulation, such as sparc,
651 sparc64, and alpha, there are many additional system calls; mips64 also
652 contains a full set of 32-bit system calls.
653
654 Over time, changes to the interfaces of some system calls have been
655 necessary. One reason for such changes was the need to increase the
656 size of structures or scalar values passed to the system call. Because
657 of these changes, certain architectures (notably, longstanding 32-bit
658 architectures such as i386) now have various groups of related system
659 calls (e.g., truncate(2) and truncate64(2)) which perform similar
660 tasks, but which vary in details such as the size of their arguments.
661 (As noted earlier, applications are generally unaware of this: the
662 glibc wrapper functions do some work to ensure that the right system
663 call is invoked, and that ABI compatibility is preserved for old bina‐
664 ries.) Examples of systems calls that exist in multiple versions are
665 the following:
666
667 * By now there are three different versions of stat(2): sys_stat()
668 (slot __NR_oldstat), sys_newstat() (slot __NR_stat), and
669 sys_stat64() (slot __NR_stat64), with the last being the most cur‐
670 rent. A similar story applies for lstat(2) and fstat(2).
671
672 * Similarly, the defines __NR_oldolduname, __NR_olduname, and __NR_un‐
673 ame refer to the routines sys_olduname(), sys_uname(), and sys_newu‐
674 name().
675
676 * In Linux 2.0, a new version of vm86(2) appeared, with the old and
677 the new kernel routines being named sys_vm86old() and sys_vm86().
678
679 * In Linux 2.4, a new version of getrlimit(2) appeared, with the old
680 and the new kernel routines being named sys_old_getrlimit() (slot
681 __NR_getrlimit) and sys_getrlimit() (slot __NR_ugetrlimit).
682
683 * Linux 2.4 increased the size of user and group IDs from 16 to 32
684 bits. To support this change, a range of system calls were added
685 (e.g., chown32(2), getuid32(2), getgroups32(2), setresuid32(2)), su‐
686 perseding earlier calls of the same name without the "32" suffix.
687
688 * Linux 2.4 added support for applications on 32-bit architectures to
689 access large files (i.e., files for which the sizes and file offsets
690 can't be represented in 32 bits.) To support this change, replace‐
691 ments were required for system calls that deal with file offsets and
692 sizes. Thus the following system calls were added: fcntl64(2), get‐
693 dents64(2), stat64(2), statfs64(2), truncate64(2), and their analogs
694 that work with file descriptors or symbolic links. These system
695 calls supersede the older system calls which, except in the case of
696 the "stat" calls, have the same name without the "64" suffix.
697
698 On newer platforms that only have 64-bit file access and 32-bit
699 UIDs/GIDs (e.g., alpha, ia64, s390x, x86-64), there is just a single
700 version of the UID/GID and file access system calls. On platforms
701 (typically, 32-bit platforms) where the *64 and *32 calls exist, the
702 other versions are obsolete.
703
704 * The rt_sig* calls were added in kernel 2.2 to support the addition
705 of real-time signals (see signal(7)). These system calls supersede
706 the older system calls of the same name without the "rt_" prefix.
707
708 * The select(2) and mmap(2) system calls use five or more arguments,
709 which caused problems in the way argument passing on the i386 used
710 to be set up. Thus, while other architectures have sys_select() and
711 sys_mmap() corresponding to __NR_select and __NR_mmap, on i386 one
712 finds old_select() and old_mmap() (routines that use a pointer to an
713 argument block) instead. These days passing five arguments is not a
714 problem any more, and there is a __NR__newselect that corresponds
715 directly to sys_select() and similarly __NR_mmap2. s390x is the on‐
716 ly 64-bit architecture that has old_mmap().
717
718 Architecture-specific details: Alpha
719 * getxgid(2) returns a pair of GID and effective GID via registers r0
720 and r20; it is provided instead of getgid(2) and getegid(2).
721
722 * getxpid(2) returns a pair of PID and parent PID via registers r0 and
723 r20; it is provided instead of getpid(2) and getppid(2).
724
725 * old_adjtimex(2) is a variant of adjtimex(2) that uses struct
726 timeval32, for compatibility with OSF/1.
727
728 * getxuid(2) returns a pair of GID and effective GID via registers r0
729 and r20; it is provided instead of getuid(2) and geteuid(2).
730
731 * sethae(2) is used for configuring the Host Address Extension regis‐
732 ter on low-cost Alphas in order to access address space beyond first
733 27 bits.
734
736 ausyscall(1) intro(2), syscall(2), unimplemented(2), errno(3), libc(7),
737 vdso(7)
738
740 This page is part of release 5.12 of the Linux man-pages project. A
741 description of the project, information about reporting bugs, and the
742 latest version of this page, can be found at
743 https://www.kernel.org/doc/man-pages/.
744
745
746
747Linux 2021-03-22 SYSCALLS(2)