SYSCALLS(2) | Руководство программиста Linux | SYSCALLS(2) |
syscalls - системные вызовы Linux
Системные вызовы Linux.
Системный вызов — это основной интерфейс между приложением и ядром Linux.
Обычно, системные вызовы не вызываются напрямую, это делается через обёрточную функцию из glibc (или другой библиотеки). Подробней о непосредственном вызове системного вызова, смотрите intro(2). Часто, но не всегда, имя обёрточной функции совпадает с именем системного вызова, который она вызывает. Например, в glibc есть функция chdir(), которая вызывает делающий всё работу системный вызов «chdir».
Часто, обёрточная функция glibc очень маленькая, она просто копирует аргументы в нужные регистры перед запуском системного вызова, а затем присваивает переменной errno значение, которое было возвращено системным вызовом. (Эти те же шаги выполняет syscall(2), её можно использовать для осуществления системных вызовов, для которых нет обёрточных функций.) Замечание: системные вызовы указывают, что произошла ошибка возвращая отрицательное целое число вызывающей стороне (если в архитектуре нет отдельного регистра/флага ошибки, смотрите syscall(2)); когда это происходит, обёрточная функция меняет знак у возвращённого значения (на положительный), копирует его в errno и возвращает -1 вызвавшей обёртку функции.
Иногда, однако, обёрточная функция производит дополнительную работу до осуществления системного вызова. Например, в настоящее время существует (по причинам, описанным далее) два похожих системных вызова — truncate(2) и truncate64(2); обёрточная функция glibc truncate() проверяет какой из системных вызовов предоставляет ядро и решает какой нужно задействовать.
Далее приведён список список системных вызовов Linux. В колонке Ядро указана версия ядра для системных вызовов, которые появились в Linux 2.2, и с какой именно версии. Также заметим следующее:
Список системных вызовов, доступных в ядре версии 4.19 (или, в некоторых случаях, только в более старых ядрах):
System call | Kernel | Notes |
_llseek(2) | 1.2 | |
_newselect(2) | 2.0 | |
_sysctl(2) | 2.0 | |
accept(2) | 2.0 | смотрите замечания по socketcall(2) |
accept4(2) | 2.6.28 | |
access(2) | 1.0 | |
acct(2) | 1.0 | |
add_key(2) | 2.6.10 | |
adjtimex(2) | 1.0 | |
alarm(2) | 1.0 | |
alloc_hugepages(2) | 2.5.36 | удалён из Linux 2.5.44 |
arc_gettls(2) | 3.9 | только на ARC |
arc_settls(2) | 3.9 | только на ARC |
arc_usr_cmpxchg(2) | 4.9 | только на ARC |
arch_prctl(2) | 2.6 | x86_64, x86 начиная с 4.12 |
atomic_barrier(2) | 2.6.34 | только на m68k |
atomic_cmpxchg_32(2) | 2.6.34 | только на m68k |
bdflush(2) | 1.2 | устарел (ничего не делает) начиная с 2.6 |
bfin_spinlock(2) | 2.6.22 | только на Blackfin (перенос удалён в Linux 4.17) |
bind(2) | 2.0 | смотрите замечания по socketcall(2) |
bpf(2) | 3.18 | |
brk(2) | 1.0 | |
breakpoint(2) | 2.2 | только в ARM OABI, определён с префиксом __ARM_NR |
cacheflush(2) | 1.2 | не для x86 |
capget(2) | 2.2 | |
capset(2) | 2.2 | |
chdir(2) | 1.0 | |
chmod(2) | 1.0 | |
chown(2) | 2.2 | смотрите в chown(2) подробности о версии |
chown32(2) | 2.4 | |
chroot(2) | 1.0 | |
clock_adjtime(2) | 2.6.39 | |
clock_getres(2) | 2.6 | |
clock_gettime(2) | 2.6 | |
clock_nanosleep(2) | 2.6 | |
clock_settime(2) | 2.6 | |
clone2(2) | 2.4 | только на IA-64 |
clone(2) | 1.0 | |
close(2) | 1.0 | |
cmpxchg_badaddr(2) | 2.6.36 | только на Tile (перенос удалён в Linux 4.17) |
connect(2) | 2.0 | смотрите замечания по socketcall(2) |
copy_file_range(2) | 4.5 | |
creat(2) | 1.0 | |
create_module(2) | 1.0 | удалён из Linux 2.6 |
delete_module(2) | 1.0 | |
dma_memcpy(2) | 2.6.22 | только на Blackfin (перенос удалён в Linux 4.17) |
dup(2) | 1.0 | |
dup2(2) | 1.0 | |
dup3(2) | 2.6.27 | |
epoll_create(2) | 2.6 | |
epoll_create1(2) | 2.6.27 | |
epoll_ctl(2) | 2.6 | |
epoll_pwait(2) | 2.6.19 | |
epoll_wait(2) | 2.6 | |
eventfd(2) | 2.6.22 | |
eventfd2(2) | 2.6.27 | |
execv(2) | 2.0 | только на SPARC/SPARC64, для совместимости с SunOS |
execve(2) | 1.0 | |
execveat(2) | 3.19 | |
exit(2) | 1.0 | |
exit_group(2) | 2.6 | |
faccessat(2) | 2.6.16 | |
fadvise64(2) | 2.6 | |
fadvise64_64(2) | 2.6 | |
fallocate(2) | 2.6.23 | |
fanotify_init(2) | 2.6.37 | |
fanotify_mark(2) | 2.6.37 | |
fchdir(2) | 1.0 | |
fchmod(2) | 1.0 | |
fchmodat(2) | 2.6.16 | |
fchown(2) | 1.0 | |
fchown32(2) | 2.4 | |
fchownat(2) | 2.6.16 | |
fcntl(2) | 1.0 | |
fcntl64(2) | 2.4 | |
fdatasync(2) | 2.0 | |
fgetxattr(2) | 2.6; 2.4.18 | |
finit_module(2) | 3.8 | |
flistxattr(2) | 2.6; 2.4.18 | |
flock(2) | 2.0 | |
fork(2) | 1.0 | |
free_hugepages(2) | 2.5.36 | удалён из Linux 2.5.44 |
fremovexattr(2) | 2.6; 2.4.18 | |
fsetxattr(2) | 2.6; 2.4.18 | |
fstat(2) | 1.0 | |
fstat64(2) | 2.4 | |
fstatat64(2) | 2.6.16 | |
fstatfs(2) | 1.0 | |
fstatfs64(2) | 2.6 | |
fsync(2) | 1.0 | |
ftruncate(2) | 1.0 | |
ftruncate64(2) | 2.4 | |
futex(2) | 2.6 | |
futimesat(2) | 2.6.16 | |
get_kernel_syms(2) | 1.0 | удалён из Linux 2.6 |
get_mempolicy(2) | 2.6.6 | |
get_robust_list(2) | 2.6.17 | |
get_thread_area(2) | 2.6 | |
get_tls(2) | 4.15 | только в ARM OABI, есть префиксом __ARM_NR |
getcpu(2) | 2.6.19 | |
getcwd(2) | 2.2 | |
getdents(2) | 2.0 | |
getdents64(2) | 2.4 | |
getdomainname(2) | 2.2 | SPARC, SPARC64; доступен как osf_getdomainname(2) на Alpha начиная с Linux 2.0 |
getdtablesize(2) | 2.0 | SPARC (удалён в 2.6.26), доступен начиная с Linux 2.0 на Alpha как osf_getdtablesize(2) |
getegid(2) | 1.0 | |
getegid32(2) | 2.4 | |
geteuid(2) | 1.0 | |
geteuid32(2) | 2.4 | |
getgid(2) | 1.0 | |
getgid32(2) | 2.4 | |
getgroups(2) | 1.0 | |
getgroups32(2) | 2.4 | |
gethostname(2) | 2.0 | Alpha, был доступен на SPARC до Linux 2.6.26 |
getitimer(2) | 1.0 | |
getpeername(2) | 2.0 | смотрите замечания по socketcall(2) |
getpagesize(2) | 2.0 | не для x86 |
getpgid(2) | 1.0 | |
getpgrp(2) | 1.0 | |
getpid(2) | 1.0 | |
getppid(2) | 1.0 | |
getpriority(2) | 1.0 | |
getrandom(2) | 3.17 | |
getresgid(2) | 2.2 | |
getresgid32(2) | 2.4 | |
getresuid(2) | 2.2 | |
getresuid32(2) | 2.4 | |
getrlimit(2) | 1.0 | |
getrusage(2) | 1.0 | |
getsid(2) | 2.0 | |
getsockname(2) | 2.0 | смотрите замечания по socketcall(2) |
getsockopt(2) | 2.0 | смотрите замечания по socketcall(2) |
gettid(2) | 2.4.11 | |
gettimeofday(2) | 1.0 | |
getuid(2) | 1.0 | |
getuid32(2) | 2.4 | |
getunwind(2) | 2.4.8 | только IA-64; устарел |
getxattr(2) | 2.6; 2.4.18 | |
getxgid(2) | 2.0 | только на Alpha; смотрите ЗАМЕЧАНИЯ |
getxpid(2) | 2.0 | только на Alpha; смотрите ЗАМЕЧАНИЯ |
getxuid(2) | 2.0 | только на Alpha; смотрите ЗАМЕЧАНИЯ |
init_module(2) | 1.0 | |
inotify_add_watch(2) | 2.6.13 | |
inotify_init(2) | 2.6.13 | |
inotify_init1(2) | 2.6.27 | |
inotify_rm_watch(2) | 2.6.13 | |
io_cancel(2) | 2.6 | |
io_destroy(2) | 2.6 | |
io_getevents(2) | 2.6 | |
io_pgetevents(2) | 4.18 | |
io_setup(2) | 2.6 | |
io_submit(2) | 2.6 | |
ioctl(2) | 1.0 | |
ioperm(2) | 1.0 | |
iopl(2) | 1.0 | |
ioprio_get(2) | 2.6.13 | |
ioprio_set(2) | 2.6.13 | |
ipc(2) | 1.0 | |
kcmp(2) | 3.5 | |
kern_features(2) | 3.7 | только на SPARC64 |
kexec_file_load(2) | 3.17 | |
kexec_load(2) | 2.6.13 | |
keyctl(2) | 2.6.10 | |
kill(2) | 1.0 | |
lchown(2) | 1.0 | смотрите в chown(2) подробности о версии |
lchown32(2) | 2.4 | |
lgetxattr(2) | 2.6; 2.4.18 | |
link(2) | 1.0 | |
linkat(2) | 2.6.16 | |
listen(2) | 2.0 | смотрите замечания по socketcall(2) |
listxattr(2) | 2.6; 2.4.18 | |
llistxattr(2) | 2.6; 2.4.18 | |
lookup_dcookie(2) | 2.6 | |
lremovexattr(2) | 2.6; 2.4.18 | |
lseek(2) | 1.0 | |
lsetxattr(2) | 2.6; 2.4.18 | |
lstat(2) | 1.0 | |
lstat64(2) | 2.4 | |
madvise(2) | 2.4 | |
mbind(2) | 2.6.6 | |
memory_ordering(2) | 2.2 | только на SPARC64 |
metag_get_tls(2) | 3.9 | только на Metag (перенос удалён в Linux 4.17) |
metag_set_fpu_flags(2) | 3.9 | только на Metag (перенос удалён в Linux 4.17) |
metag_set_tls(2) | 3.9 | только на Metag (перенос удалён в Linux 4.17) |
metag_setglobalbit(2) | 3.9 | только на Metag (перенос удалён в Linux 4.17) |
membarrier(2) | 3.17 | |
memfd_create(2) | 3.17 | |
migrate_pages(2) | 2.6.16 | |
mincore(2) | 2.4 | |
mkdir(2) | 1.0 | |
mkdirat(2) | 2.6.16 | |
mknod(2) | 1.0 | |
mknodat(2) | 2.6.16 | |
mlock(2) | 2.0 | |
mlock2(2) | 4.4 | |
mlockall(2) | 2.0 | |
mmap(2) | 1.0 | |
mmap2(2) | 2.4 | |
modify_ldt(2) | 1.0 | |
mount(2) | 1.0 | |
move_pages(2) | 2.6.18 | |
mprotect(2) | 1.0 | |
mq_getsetattr(2) | 2.6.6 | |
mq_notify(2) | 2.6.6 | |
mq_open(2) | 2.6.6 | |
mq_timedreceive(2) | 2.6.6 | |
mq_timedsend(2) | 2.6.6 | |
mq_unlink(2) | 2.6.6 | |
mremap(2) | 2.0 | |
msgctl(2) | 2.0 | смотрите замечания по ipc(2) |
msgget(2) | 2.0 | смотрите замечания по ipc(2) |
msgrcv(2) | 2.0 | смотрите замечания по ipc(2) |
msgsnd(2) | 2.0 | смотрите замечания по ipc(2) |
msync(2) | 2.0 | |
munlock(2) | 2.0 | |
munlockall(2) | 2.0 | |
munmap(2) | 1.0 | |
name_to_handle_at(2) | 2.6.39 | |
nanosleep(2) | 2.0 | |
newfstatat(2) | 2.6.16 | смотрите stat(2) |
nfsservctl(2) | 2.2 | удалён из Linux 3.1 |
nice(2) | 1.0 | |
old_adjtimex(2) | 2.0 | только на Alpha; смотрите ЗАМЕЧАНИЯ |
old_getrlimit(2) | 2.4 | старый вариант getrlimit(2), использующий другое значение для RLIM_INFINITY |
oldfstat(2) | 1.0 | |
oldlstat(2) | 1.0 | |
oldolduname(2) | 1.0 | |
oldstat(2) | 1.0 | |
oldumount(2) | 2.4.116 | название старого umount(2) syscall на Alpha |
olduname(2) | 1.0 | |
open(2) | 1.0 | |
open_by_handle_at(2) | 2.6.39 | |
openat(2) | 2.6.16 | |
or1k_atomic(2) | 3.1 | только на OpenRISC 1000 |
pause(2) | 1.0 | |
pciconfig_iobase(2) | 2.2.15; 2.4 | не для x86 |
pciconfig_read(2) | 2.0.26; 2.2 | не для x86 |
pciconfig_write(2) | 2.0.26; 2.2 | не для x86 |
perf_event_open(2) | 2.6.31 | был perf_counter_open() в 2.6.31; переименован в 2.6.32 |
personality(2) | 1.2 | |
perfctr(2) | 2.2 | только на SPARC; удалён в 2.6.34 |
perfmonctl(2) | 2.4 | только на IA-64 |
pipe(2) | 1.0 | |
pipe2(2) | 2.6.27 | |
pivot_root(2) | 2.4 | |
pkey_alloc(2) | 4.8 | |
pkey_free(2) | 4.8 | |
pkey_mprotect(2) | 4.8 | |
poll(2) | 2.0.36; 2.2 | |
ppoll(2) | 2.6.16 | |
prctl(2) | 2.2 | |
pread(2) | используется для pread64(2) на AVR32 (перенос удалён в Linux 4.12) и Blackfin (перенос удалён в Linux 4.17) | |
pread64(2) | добавлен под именем «pread» в 2.2 переименован в «pread64» в 2.6 | |
preadv(2) | 2.6.30 | |
preadv2(2) | 4.6 | |
prlimit64(2) | 2.6.36 | |
process_vm_readv(2) | 3.2 | |
process_vm_writev(2) | 3.2 | |
pselect6(2) | 2.6.16 | |
ptrace(2) | 1.0 | |
pwrite(2) | используется для pwrite64(2) на AVR32 (перенос удалён в Linux 4.12) и Blackfin (перенос удалён в Linux 4.17) | |
pwrite64(2) | добавлен под именем «pwrite» в 2.2 переименован в «pwrite64» в 2.6 | |
pwritev(2) | 2.6.30 | |
pwritev2(2) | 4.6 | |
query_module(2) | 2.2 | удалён из Linux 2.6 |
quotactl(2) | 1.0 | |
read(2) | 1.0 | |
readahead(2) | 2.4.13 | |
readdir(2) | 1.0 | |
readlink(2) | 1.0 | |
readlinkat(2) | 2.6.16 | |
readv(2) | 2.0 | |
reboot(2) | 1.0 | |
recv(2) | 2.0 | смотрите замечания по socketcall(2) |
recvfrom(2) | 2.0 | смотрите замечания по socketcall(2) |
recvmsg(2) | 2.0 | смотрите замечания по socketcall(2) |
recvmmsg(2) | 2.6.33 | |
remap_file_pages(2) | 2.6 | устарел начиная с 3.16 |
removexattr(2) | 2.6; 2.4.18 | |
rename(2) | 1.0 | |
renameat(2) | 2.6.16 | |
renameat2(2) | 3.15 | |
request_key(2) | 2.6.10 | |
restart_syscall(2) | 2.6 | |
riscv_flush_icache(2) | 4.15 | только на RISC-V |
rmdir(2) | 1.0 | |
rseq(2) | 4.18 | |
rt_sigaction(2) | 2.2 | |
rt_sigpending(2) | 2.2 | |
rt_sigprocmask(2) | 2.2 | |
rt_sigqueueinfo(2) | 2.2 | |
rt_sigreturn(2) | 2.2 | |
rt_sigsuspend(2) | 2.2 | |
rt_sigtimedwait(2) | 2.2 | |
rt_tgsigqueueinfo(2) | 2.6.31 | |
rtas(2) | 2.6.2 | только на PowerPC/PowerPC64 |
s390_runtime_instr(2) | 3.7 | только для s390 |
s390_pci_mmio_read(2) | 3.19 | только для s390 |
s390_pci_mmio_write(2) | 3.19 | только для s390 |
s390_sthyi(2) | 4.15 | только для s390 |
s390_guarded_storage(2) | 4.12 | только для s390 |
sched_get_affinity(2) | 2.6 | название sched_getaffinity(2) на SPARC и SPARC64 |
sched_get_priority_max(2) | 2.0 | |
sched_get_priority_min(2) | 2.0 | |
sched_getaffinity(2) | 2.6 | |
sched_getattr(2) | 3.14 | |
sched_getparam(2) | 2.0 | |
sched_getscheduler(2) | 2.0 | |
sched_rr_get_interval(2) | 2.0 | |
sched_set_affinity(2) | 2.6 | название sched_setaffinity(2) на SPARC и SPARC64 |
sched_setaffinity(2) | 2.6 | |
sched_setattr(2) | 3.14 | |
sched_setparam(2) | 2.0 | |
sched_setscheduler(2) | 2.0 | |
sched_yield(2) | 2.0 | |
seccomp(2) | 3.17 | |
select(2) | 1.0 | |
semctl(2) | 2.0 | смотрите замечания по ipc(2) |
semget(2) | 2.0 | смотрите замечания по ipc(2) |
semop(2) | 2.0 | смотрите замечания по ipc(2) |
semtimedop(2) | 2.6; 2.4.22 | |
send(2) | 2.0 | смотрите замечания по socketcall(2) |
sendfile(2) | 2.2 | |
sendfile64(2) | 2.6; 2.4.19 | |
sendmmsg(2) | 3.0 | |
sendmsg(2) | 2.0 | смотрите замечания по socketcall(2) |
sendto(2) | 2.0 | смотрите замечания по socketcall(2) |
set_mempolicy(2) | 2.6.6 | |
set_robust_list(2) | 2.6.17 | |
set_thread_area(2) | 2.6 | |
set_tid_address(2) | 2.6 | |
set_tls(2) | 2.6.11 | только в ARM OABI/EABI (константа с префиксом __ARM_NR) |
setdomainname(2) | 1.0 | |
setfsgid(2) | 1.2 | |
setfsgid32(2) | 2.4 | |
setfsuid(2) | 1.2 | |
setfsuid32(2) | 2.4 | |
setgid(2) | 1.0 | |
setgid32(2) | 2.4 | |
setgroups(2) | 1.0 | |
setgroups32(2) | 2.4 | |
sethae(2) | 2.0 | только на Alpha; смотрите ЗАМЕЧАНИЯ |
sethostname(2) | 1.0 | |
setitimer(2) | 1.0 | |
setns(2) | 3.0 | |
setpgid(2) | 1.0 | |
setpgrp(2) | 2.0 | дополнительное имя для setpgid(2) на Alpha |
setpriority(2) | 1.0 | |
setregid(2) | 1.0 | |
setregid32(2) | 2.4 | |
setresgid(2) | 2.2 | |
setresgid32(2) | 2.4 | |
setresuid(2) | 2.2 | |
setresuid32(2) | 2.4 | |
setreuid(2) | 1.0 | |
setreuid32(2) | 2.4 | |
setrlimit(2) | 1.0 | |
setsid(2) | 1.0 | |
setsockopt(2) | 2.0 | смотрите замечания по socketcall(2) |
settimeofday(2) | 1.0 | |
setuid(2) | 1.0 | |
setuid32(2) | 2.4 | |
setup(2) | 1.0 | удалён в 2.2 |
setxattr(2) | 2.6; 2.4.18 | |
sgetmask(2) | 1.0 | |
shmat(2) | 2.0 | смотрите замечания по ipc(2) |
shmctl(2) | 2.0 | смотрите замечания по ipc(2) |
shmdt(2) | 2.0 | смотрите замечания по ipc(2) |
shmget(2) | 2.0 | смотрите замечания по ipc(2) |
shutdown(2) | 2.0 | смотрите замечания по socketcall(2) |
sigaction(2) | 1.0 | |
sigaltstack(2) | 2.2 | |
signal(2) | 1.0 | |
signalfd(2) | 2.6.22 | |
signalfd4(2) | 2.6.27 | |
sigpending(2) | 1.0 | |
sigprocmask(2) | 1.0 | |
sigreturn(2) | 1.0 | |
sigsuspend(2) | 1.0 | |
socket(2) | 2.0 | смотрите замечания по socketcall(2) |
socketcall(2) | 1.0 | |
socketpair(2) | 2.0 | смотрите замечания по socketcall(2) |
spill(2) | 2.6.13 | только на Xtensa |
splice(2) | 2.6.17 | |
spu_create(2) | 2.6.16 | только на PowerPC/PowerPC64 |
spu_run(2) | 2.6.16 | только на PowerPC/PowerPC64 |
sram_alloc(2) | 2.6.22 | Blackfin (перенос удалён в Linux 4.17) |
sram_free(2) | 2.6.22 | Blackfin (перенос удалён в Linux 4.17) |
ssetmask(2) | 1.0 | |
stat(2) | 1.0 | |
stat64(2) | 2.4 | |
statfs(2) | 1.0 | |
statfs64(2) | 2.6 | |
statx(2) | 4.11 | |
stime(2) | 1.0 | |
subpage_prot(2) | 2.6.25 | только на PowerPC/PowerPC64 |
swapcontext(2) | 2.6.3 | только на PowerPC/PowerPC64 |
switch_endian(2) | 4.1 | только для PowerPC64 |
swapcontext(2) | 2.6.3 | только для PowerPC |
swapoff(2) | 1.0 | |
swapon(2) | 1.0 | |
symlink(2) | 1.0 | |
symlinkat(2) | 2.6.16 | |
sync(2) | 1.0 | |
sync_file_range(2) | 2.6.17 | |
sync_file_range2(2) | 2.6.22 | |
syncfs(2) | 2.6.39 | |
sys_debug_setcontext(2) | 2.6.11 | только для PowerPC |
syscall(2) | 1.0 | ещё доступен в ARM OABI и MIPS O32 ABI |
sysfs(2) | 1.2 | |
sysinfo(2) | 1.0 | |
syslog(2) | 1.0 | |
sysmips(2) | 2.6.0 | только на MIPS |
tee(2) | 2.6.17 | |
tgkill(2) | 2.6 | |
time(2) | 1.0 | |
timer_create(2) | 2.6 | |
timer_delete(2) | 2.6 | |
timer_getoverrun(2) | 2.6 | |
timer_gettime(2) | 2.6 | |
timer_settime(2) | 2.6 | |
timerfd_create(2) | 2.6.25 | |
timerfd_gettime(2) | 2.6.25 | |
timerfd_settime(2) | 2.6.25 | |
times(2) | 1.0 | |
tkill(2) | 2.6; 2.4.22 | |
truncate(2) | 1.0 | |
truncate64(2) | 2.4 | |
ugetrlimit(2) | 2.4 | |
umask(2) | 1.0 | |
umount(2) | 1.0 | |
umount2(2) | 2.2 | |
uname(2) | 1.0 | |
unlink(2) | 1.0 | |
unlinkat(2) | 2.6.16 | |
unshare(2) | 2.6.16 | |
uselib(2) | 1.0 | |
ustat(2) | 1.0 | |
userfaultfd(2) | 4.3 | |
usr26(2) | 2.4.8.1 | только в ARM OABI |
usr32(2) | 2.4.8.1 | только в ARM OABI |
utime(2) | 1.0 | |
utimensat(2) | 2.6.22 | |
utimes(2) | 2.2 | |
utrap_install(2) | 2.2 | только на SPARC64 |
vfork(2) | 2.2 | |
vhangup(2) | 1.0 | |
vm86old(2) | 1.0 | ранее «vm86»; переименован в 2.0.28/2.2 |
vm86(2) | 2.0.28; 2.2 | |
vmsplice(2) | 2.6.17 | |
wait4(2) | 1.0 | |
waitid(2) | 2.6.10 | |
waitpid(2) | 1.0 | |
write(2) | 1.0 | |
writev(2) | 2.0 | |
xtensa(2) | 2.6.13 | только на Xtensa |
Для многих платформ, включая x86-32, все сокетные вызовы мультиплексируются (с помощью обёрточных функций glibc) через socketcall(2), а подобные IPC вызовы System V мультиплексируются через ipc(2).
Хотя для них и зарезервированы места в таблице системных вызовов, следующие системные вызовы не реализованы в стандартном ядре: afs_syscall(2), break(2), ftime(2), getpmsg(2), gtty(2), idle(2), lock(2), madvise1(2), mpx(2), phys(2), prof(2), profil(2), putpmsg(2), security(2), stty(2), tuxcall(2), ulimit(2) и vserver(2) (см. также unimplemented(2)). Однако ftime(3), profil(3) и ulimit(3) есть среди библиотечных функций. Место для phys(2) занято начиная с ядра 2.1.116 под umount(2); phys(2) никогда не будет реализован. Вызовы getpmsg(2) и putpmsg(2) есть в ядрах с заплатами, обеспечивающими поддержку STREAMS, и могут никогда не появиться в стандартном ядре.
На короткое время появлялся set_zone_reclaim(2), добавленный в Linux 2.6.13 и удалённый в 2.6.16; данный системный вызов никогда не был доступен из пользовательского пространства.
Чаще всего, код системного вызова с номером __NR_xxx, определённого в /usr/include/asm/unistd.h, можно найти в исходном коде ядра Linux в функции sys_xxx() (таблицу вызовов для i386 можно найти в /usr/src/linux/arch/i386/kernel/entry.S). Есть много исключений из этого правила, в основном из-за того, что большинство старых системных вызовов заменена на новые, при чём без всякой системы. На платформах с эмуляцией собственнических ОС, таких как sparc, sparc64 и alpha, существует много дополнительных системных вызовов; для mips64 также есть полный набор 32-битных системных вызовов.
С течением времени при необходимости происходили изменения в интерфейсе некоторых системных вызовов. Одной из причин таких изменений была необходимость увеличения размера структур или скалярных значений передаваемых системному вызову. Из-за этих изменений на некоторых архитектурах (а именно на старых 32-битных i386) появились различные группы похожих системных вызовов (например, truncate(2) и truncate64(2)), которые выполняют одинаковые задачи, но отличаются размером своих аргументов. (Как уже отмечалось, на приложения это не влияет: обёрточные функции glibc выполняют некоторые действия по запуску правильного системного вызова, и это обеспечивает совместимость по ABI для старых двоичных файлов.) Примеры системных вызовов, у которых есть несколько версий:
intro(2), syscall(2), unimplemented(2), errno(3), libc(7), vdso(7)
2019-03-06 | Linux |