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