Scroll to navigation

syscalls(2) System Calls Manual syscalls(2)

NAZWA

syscalls - linuksowe wywołania systemowe

SKŁADNIA

Linuksowe wywołania systemowe.

OPIS

Wywołanie systemowe jest podstawowym interfejsem pomiędzy aplikacją a jądrem Linux.

Wywołania systemowe i biblioteczne funkcje opakowujące

Wywołania systemowe nie są zwykle wywoływane bezpośrednio, lecz za pośrednictwem funkcji opakowujących glibc (lub jakiejś innej biblioteki). Szczegóły na temat bezpośredniego przywoływania wywołań systemowych opisano w podręczniku intro(2). Często, lecz nie zawsze, nazwa funkcji opakowującej jest taka sama, jak przywoływanego przez nią wywołania systemowego. Przykładowo glibc zawiera funkcję chdir() przywołującą wywołanie systemowe „chdir”.

Funkcja opakowująca glibc jest często skromna, nie robiąc wiele poza skopiowaniem argumentów do prawidłowych rejestrów przed wywołaniem wywołania systemowego, a potem ustawiając odpowiednio errno po powrocie wywołania systemowego (te same kroki są wykonywane przez syscall(2), które może służyć do przywoływania wywołań systemowych, które nie posiadają funkcji opakowujących). Uwaga: wywołanie systemowe zgłasza niepowodzenie, zwracając ujemny numer błędu do wywołującego, na architekturach które nie posiadają odrębnej flagi/rejestru błędów, jak to opisano w syscall(2); gdy tak się stanie, funkcja opakowująca zmienia znak zwracanego numeru błędu (staje się on dodatni), kopiuje go do errno i zwraca -1 do wywołującego funkcję opakowującą.

Czasem jednak, funkcja opakowująca wykonuje dodatkową pracę przed przywołaniem wywołania systemowego. Na przykład, istnieją obecnie (z powodów opisanych niżej) dwa spokrewnione wywołania systemowe: truncate(2) i truncate64(2), a funkcja opakowująca glibc truncate() sprawdza, które z nich jest zapewnione przez jądro i określa, którego należy użyć.

Lista wywołań systemowych

Poniżej przedstawiono listę linuksowych wywołań systemowych. Kolumna Jądro wskazuje wersję jądra w przypadku wywołań, które pojawiły się w Linuksie 2.2 lub później. Proszę odnotować, że:

Jeśli nie wskazano wersji jądra, wywołanie systemowe pojawiło się w Linuksie 1.0 lub wcześniej.
Jeśli wywołanie systemowe oznaczono wersją „1.2” oznacza to, że wywołanie systemowe prawdopodobnie pojawiło się w wersji jądra Linux 1.1.x, czyli pierwszą wersją stabilną z danym wywołaniem była wersja 1.2 (rozwój Linuksa 1.2 rozpoczął się od odgałęzienia od wersji 1.0.6 Linuksa i trwał w ramach niestabilnej serii jąder Linux 1.1.x).
Jeśli wywołanie systemowe oznaczono wersją „2.0” oznacza to, że wywołanie systemowe prawdopodobnie pojawiło się w wersji jądra Linux 1.3.x, czyli pierwszą wersją stabilną z danym wywołaniem była wersja 2.0 (rozwój Linuksa 2.0 rozpoczął się od odgałęzienia od wersji 1.2.x, gdzieś w okolicach wersji 1.2.10 Linuksa, i trwał w ramach niestabilnej serii jąder Linux 1.3.x).
Jeśli wywołanie systemowe oznaczono wersją „2.2” oznacza to, że wywołanie systemowe prawdopodobnie pojawiło się w wersji jądra Linux 2.1.x, czyli pierwszą wersją stabilną z danym wywołaniem była wersja 2.2.0 (rozwój Linuksa 2.2 rozpoczął się od odgałęzienia od wersji 2.0.21 Linuksa i trwał w ramach niestabilnej serii jąder Linux 2.1.x).
Jeśli wywołanie systemowe oznaczono wersją „2.4” oznacza to, że wywołanie systemowe prawdopodobnie pojawiło się w wersji jądra Linux 2.3.x, czyli pierwszą wersją stabilną z danym wywołaniem była wersja 2.4.0 (rozwój Linuksa 2.4 rozpoczął się od odgałęzienia od wersji 2.2.8 Linuksa i trwał w ramach niestabilnej serii jąder Linux 2.3.x).
Jeśli wywołanie systemowe oznaczono wersją „2.6” oznacza to, że wywołanie systemowe prawdopodobnie pojawiło się w wersji jądra Linux 2.5.x, czyli pierwszą wersją stabilną z danym wywołaniem była wersja 2.6.0 (rozwój Linuksa 2.6 rozpoczął się od odgałęzienia od wersji 2.4.15 Linuksa i trwał w ramach niestabilnej serii jąder Linux 2.5.x).
Od wersji Linuksa 2.6.0, model rozwoju zmienił się, a nowe wywołania systemowe mogą pojawiać się w każdym wydaniu Linuksa 2.6.x. W takim przypadku podana jest dokładna wersja, w której pojawiło się dane wywołanie systemowe. Tę konwencję stosuje się również: w serii jąder Linux 3.x, która rozpoczęła się po Linuksie 2.6.39; w serii jąder Linux 4.x, która rozpoczęła się po Linuksie 3.19; w serii jąder Linux 5.x, która rozpoczęła się po Linuksie 4.20; w serii jąder Linux 6.x, która rozpoczęła się po Linuksie 5.19.
W niektórych sytuacjach, wywołanie systemowe dodano do stabilnej serii jąder po jej odgałęzieniu z poprzedniej stabilnej serii jąder, a następnie przeportowano do wcześniejszej stabilnej serii jąder. Na przykład część wywołań systemowych, które pojawiły się w Linuksie 2.6.x przeportowano również do wydania Linux 2.4.x po Linuksie 2.4.15. W takim przypadku, podane są wersje z obu głównych serii jąder, w których pojawiło się dane wywołanie.

Lista wywołań systemowych dostępnych w Linuksie 5.14 (w kilku przypadkach tylko na starszych jądrach) jest następująca:

Wywołanie systemowe Jądro Uwagi
_llseek(2) 1.2
_newselect(2) 2.0
_sysctl(2) 2.0 Usunięte w 5.5
accept(2) 2.0 Zob. uwagi w 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 Usunięte w 2.5.44
arc_gettls(2) 3.9 Tylko ARC
arc_settls(2) 3.9 Tylko ARC
arc_usr_cmpxchg(2) 4.9 Tylko ARC
arch_prctl(2) 2.6 x86_64, x86 od 4.12
atomic_barrier(2) 2.6.34 Tylko m68k
atomic_cmpxchg_32(2) 2.6.34 Tylko m68k
bdflush(2) 1.2 Przestarzałe (nieaktywne) od 2.6
bind(2) 2.0 Zob. uwagi w socketcall(2)
bpf(2) 3.18
brk(2) 1.0
breakpoint(2) 2.2 Tylko OABI ARM, zdefiniowane z przedrostkiem __ARM_NR
cacheflush(2) 1.2 Nie na x86
capget(2) 2.2
capset(2) 2.2
chdir(2) 1.0
chmod(2) 1.0
chown(2) 2.2 Wersje opisano szczegół. w 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 Tylko IA-64
clone(2) 1.0
clone3(2) 5.3
close(2) 1.0
close_range(2) 5.9
connect(2) 2.0 Zob. uwagi w socketcall(2)
copy_file_range(2) 4.5
creat(2) 1.0
create_module(2) 1.0 Usunięte w 2.6
delete_module(2) 1.0
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_pwait2(2) 5.11
epoll_wait(2) 2.6
eventfd(2) 2.6.22
eventfd2(2) 2.6.27
execv(2) 2.0 Tylko SPARC/SPARC64, ze wzgl. na kompat. z SunOS
execve(2) 1.0
execveat(2) 3.19
exit(2) 1.0
exit_group(2) 2.6
faccessat(2) 2.6.16
faccessat2(2) 5.8
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 Usunięte w 2.5.44
fremovexattr(2) 2.6; 2.4.18
fsconfig(2) 5.2
fsetxattr(2) 2.6; 2.4.18
fsmount(2) 5.2
fsopen(2) 5.2
fspick(2) 5.2
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 Usunięte w 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 Tylko OABI ARM, z przedrostkiem __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; dost. jako osf_getdomainname(2) na Alpha od Linuksa 2.0
getdtablesize(2) 2.0 SPARC (usunięte w 2.6.26), dostępne na Alpha jako 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, było dost. na SPARC do Linuksa 2.6.26
getitimer(2) 1.0
getpeername(2) 2.0 Zob. uwagi w socketcall(2)
getpagesize(2) 2.0 Tylko Alpha, SPARC/SPARC64
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 Zob. uwagi w socketcall(2)
getsockopt(2) 2.0 Zob. uwagi w socketcall(2)
gettid(2) 2.4.11
gettimeofday(2) 1.0
getuid(2) 1.0
getuid32(2) 2.4
getunwind(2) 2.4.8 Tylko IA-64; przestarzałe
getxattr(2) 2.6; 2.4.18
getxgid(2) 2.0 Tylko Alpha; zob. UWAGI
getxpid(2) 2.0 Tylko Alpha; zob. UWAGI
getxuid(2) 2.0 Tylko Alpha; zob. UWAGI
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
io_uring_enter(2) 5.1
io_uring_register(2) 5.1
io_uring_setup(2) 5.1
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 Tylko SPARC64
kexec_file_load(2) 3.17
kexec_load(2) 2.6.13
keyctl(2) 2.6.10
kill(2) 1.0
landlock_add_rule(2) 5.13
landlock_create_ruleset(2) 5.13
landlock_restrict_self(2) 5.13
lchown(2) 1.0 Wersje opisano szczegół. w 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 Zob. uwagi w 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 Tylko SPARC64
membarrier(2) 3.17
memfd_create(2) 3.17
memfd_secret(2) 5.14
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_mount(2) 5.2
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 Zob. uwagi w ipc(2)
msgget(2) 2.0 Zob. uwagi w ipc(2)
msgrcv(2) 2.0 Zob. uwagi w ipc(2)
msgsnd(2) 2.0 Zob. uwagi w 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 Zob. stat(2)
nfsservctl(2) 2.2 Usunięte w 3.1
nice(2) 1.0
old_adjtimex(2) 2.0 Tylko Alpha; zob. UWAGI
old_getrlimit(2) 2.4 Stary wariant getrlimit(2) używający innej wartości RLIM_INFINITY
oldfstat(2) 1.0
oldlstat(2) 1.0
oldolduname(2) 1.0
oldstat(2) 1.0
oldumount(2) 2.4.116 Nazwa starego umount(2) wywołania syst. na Alpha
olduname(2) 1.0
open(2) 1.0
open_by_handle_at(2) 2.6.39
open_tree(2) 5.2
openat(2) 2.6.16
openat2(2) 5.6
or1k_atomic(2) 3.1 Tylko OpenRISC 1000
pause(2) 1.0
pciconfig_iobase(2) 2.2.15; 2.4 Nie na x86
pciconfig_read(2) 2.0.26; 2.2 Nie na x86
pciconfig_write(2) 2.0.26; 2.2 Nie na x86
perf_event_open(2) 2.6.31 Wcześniej perf_counter_open() w 2.6.31; nowa nazwa w 2.6.32
personality(2) 1.2
perfctr(2) 2.2 Tylko SPARC; usunięte w 2.6.34
perfmonctl(2) 2.4 Tylko IA-64; usunięte w 5.10
pidfd_getfd(2) 5.6
pidfd_send_signal(2) 5.1
pidfd_open(2) 5.3
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
pread64(2) Dodane jako „pread” 2.2; nowa nazwa „pread64” w 2.6
preadv(2) 2.6.30
preadv2(2) 4.6
prlimit64(2) 2.6.36
process_madvise(2) 5.10
process_vm_readv(2) 3.2
process_vm_writev(2) 3.2
pselect6(2) 2.6.16
ptrace(2) 1.0
pwrite64(2) Dodane jako „pwrite” w 2.2; nowa nazwa „pwrite64” w 2.6
pwritev(2) 2.6.30
pwritev2(2) 4.6
query_module(2) 2.2 Usunięte w 2.6
quotactl(2) 1.0
quotactl_fd(2) 5.14
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 Zob. uwagi w socketcall(2)
recvfrom(2) 2.0 Zob. uwagi w socketcall(2)
recvmsg(2) 2.0 Zob. uwagi w socketcall(2)
recvmmsg(2) 2.6.33
remap_file_pages(2) 2.6 Przestarzałe od 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 Tylko 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 Tylko PowerPC/PowerPC64
s390_runtime_instr(2) 3.7 Tylko s390
s390_pci_mmio_read(2) 3.19 Tylko s390
s390_pci_mmio_write(2) 3.19 Tylko s390
s390_sthyi(2) 4.15 Tylko s390
s390_guarded_storage(2) 4.12 Tylko s390
sched_get_affinity(2) 2.6 Nazwa sched_getaffinity(2) na SPARC i 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 Nazwa sched_setaffinity(2) na SPARC i 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 Zob. uwagi w ipc(2)
semget(2) 2.0 Zob. uwagi w ipc(2)
semop(2) 2.0 Zob. uwagi w ipc(2)
semtimedop(2) 2.6; 2.4.22
send(2) 2.0 Zob. uwagi w socketcall(2)
sendfile(2) 2.2
sendfile64(2) 2.6; 2.4.19
sendmmsg(2) 3.0
sendmsg(2) 2.0 Zob. uwagi w socketcall(2)
sendto(2) 2.0 Zob. uwagi w 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 Tylko OABI/EABI ARM (stała ma przedrostek __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 Tylko Alpha; zob. UWAGI
sethostname(2) 1.0
setitimer(2) 1.0
setns(2) 3.0
setpgid(2) 1.0
setpgrp(2) 2.0 Inna nazwa setpgid(2) na 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 Zob. uwagi w socketcall(2)
settimeofday(2) 1.0
setuid(2) 1.0
setuid32(2) 2.4
setup(2) 1.0 Usunięte w 2.2
setxattr(2) 2.6; 2.4.18
sgetmask(2) 1.0
shmat(2) 2.0 Zob. uwagi w ipc(2)
shmctl(2) 2.0 Zob. uwagi w ipc(2)
shmdt(2) 2.0 Zob. uwagi w ipc(2)
shmget(2) 2.0 Zob. uwagi w ipc(2)
shutdown(2) 2.0 Zob. uwagi w 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 Zob. uwagi w socketcall(2)
socketcall(2) 1.0
socketpair(2) 2.0 Zob. uwagi w socketcall(2)
spill(2) 2.6.13 Tylko Xtensa
splice(2) 2.6.17
spu_create(2) 2.6.16 Tylko PowerPC/PowerPC64
spu_run(2) 2.6.16 Tylko PowerPC/PowerPC64
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 Tylko PowerPC/PowerPC64
swapcontext(2) 2.6.3 Tylko PowerPC/PowerPC64
switch_endian(2) 4.1 Tylko PowerPC64
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 Tylko PowerPC
syscall(2) 1.0 Wciąż dostępne na OABI ARM i ABI O32 MIPS
sysfs(2) 1.2
sysinfo(2) 1.0
syslog(2) 1.0
sysmips(2) 2.6.0 Tylko 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 Tylko OABI ARM
usr32(2) 2.4.8.1 Tylko OABI ARM
utime(2) 1.0
utimensat(2) 2.6.22
utimes(2) 2.2
utrap_install(2) 2.2 Tylko SPARC64
vfork(2) 2.2
vhangup(2) 1.0
vm86old(2) 1.0 Wcześniej „vm86”; nowa nazwa w 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 Tylko Xtensa

Na wielu platformach, w tym x86-32, wywołania gniazd są zwielokrotniane (za pomocą funkcji opakowujących glibc) poprzez socketcall(2) i analogicznie wywołania IPC Systemu V są zwielokrotniane poprzez ipc(2).

Dla następujących wywołań systemowych zarezerwowano miejsca w systemowej tablicy wywołań, ale nie są one zaimplementowane w standardowym jądrze: 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) i vserver(2) (zob. też unimplemented(2)). Jednak ftime(3), profil(3) i ulimit(3) istnieją jako funkcje biblioteczne. Miejsce dla phys(2) od Linuksa 2.1.116 jest używane przez umount(2); phys(2) nigdy nie zostanie zaimplementowane. Wywołania getpmsg(2) i putpmsg(2) są przeznaczone do jąder zmodyfikowanych do obsługi struktury STREAMS i mogą nigdy nie trafić do standardowego jądra.

Istniało przez chwilę set_zone_reclaim(2), dodane w Linuksie 2.6.13 i usunięte w Linuksie 2.6.16; to wywołanie systemowe nigdy nie było dostępne dla przestrzeni użytkownika.

Wywołania systemowe na usuniętych portach

Niektóre wywołania systemowe istniały tylko na architekturach Linuksa, które zostały już usunięte z jądra:

bfin_spinlock(2) (dodane w Linuksie 2.6.22)
dma_memcpy(2) (dodane w Linuksie 2.6.22)
pread(2) (dodane w Linuksie 2.6.22)
pwrite(2) (dodane w Linuksie 2.6.22)
sram_alloc(2) (dodane w Linuksie 2.6.22)
sram_free(2) (dodane w Linuksie 2.6.22)
metag_get_tls(2) (dodane w Linuksie 3.9)
metag_set_fpu_flags(2) (dodane w Linuksie 3.9)
metag_set_tls(2) (dodane w Linuksie 3.9)
metag_setglobalbit(2) (dodane w Linuksie 3.9)
cmpxchg_badaddr(2) (dodane w Linuksie 2.6.36)

UWAGI

Najczęściej kod należący do wywołania systemowego o numerze __NR_xxx zdefiniowanym w /usr/include/asm/unistd.h można znaleźć w źródłach jądra Linux w funkcji sys_xxx(). Istnieje jednak wiele wyjątków, głównie z powodu zastąpienia starszych wywołań systemowych nowszymi, co odbyło się w nie do końca systematyczny sposób. Na platformach z zastrzeżoną emulacją systemu operacyjnego, takich jak sparc, sparc64 i alpha, istnieje wiele dodatkowych wywołań systemowych; mips64 zawiera również pełny zbiór 32-bitowych wywołań systemowych.

Z czasem, konieczna była zmiana interfejsów niektórych wywołań systemowych. Jedną z przyczyn była konieczność zwiększenia struktur wartości skalarnych przekazywanych do wywołań systemowych. Z powodów tych zmian, niektóre architektury (między innymi długowieczne architektury 32-bitowe, takie jak i386) mają obecnie grupy powiązanych wywołań systemowych (np. truncate(2) i truncate64(2)) realizujących podobne zadania, lecz różniących się w szczegółach, takich jak rozmiar swoich argumentów (jak zaznaczono wcześniej, aplikacje zwykle nie są tego świadome; funkcje opakowujące glibc wykonują pewną pracę, aby przywołać odpowiednie wywołanie systemowe oraz zapewnić kompatybilność ABI dla starszych plików wykonywalnych). Oto przykłady wywołań systemowych, które istnieją w różnych wersjach:

Obecnie występują trzy różne wersje stat(2): sys_stat() (miejsce __NR_oldstat), sys_newstat() (miejsce __NR_stat) i sys_stat64() (miejsce __NR_stat64), z których ostatnia jest najnowsza. Podobna sytuacja występuje w przypadku lstat(2) i fstat(2).
Podobnie, definicje __NR_oldolduname, __NR_olduname i __NR_uname odnoszą się do funkcji sys_olduname(), sys_uname() i sys_newuname().
W Linuksie 2.0, pojawiła się nowa wersja vm86(2), przy czym stara i nowa funkcja otrzymała nazwę, odpowiednio, sys_vm86old() i sys_vm86().
W Linuksie 2.4, pojawiła się nowa wersja getrlimit(2), przy czym stara i nowa funkcja otrzymała nazwę, odpowiednio, sys_old_getrlimit() (miejsce __NR_getrlimit) i sys_getrlimit() (miejsce __NR_ugetrlimit).
Linux 2.4 zwiększył rozmiar identyfikatorów użytkownika i grupy z 16 do 32 bitów. Aby obsłużyć tę zmianę, dodano wiele wywołań systemowych (np. chown32(2), getuid32(2), getgroups32(2), setresuid32(2)), zastępujących wcześniejsze wywołania o tej samej nazwie, bez przyrostka „32”.
Linux 2.4 dodał obsługę dostępu do dużych plików dla aplikacji 32-bitowych (tj. plików, których rozmiaru i przesunięcia pliku nie da się odwzorować w 32 bitach). Aby obsłużyć tę zmianę, konieczne było zastąpienie wywołań systemowych, które działają na przesunięciach plików i ich rozmiarach. Z tego względu dodano wywołania systemowe: fcntl64(2), getdents64(2), stat64(2), statfs64(2), truncate64(2) oraz ich odpowiedniki działające na deskryptorach plików i dowiązaniach symbolicznych. Opisywane wywołania zastąpiły starsze wywołania systemowe, które, z wyłączeniem wywołań „stat”, miały te same nazwy, jedynie bez przyrostka „64”.
Na nowszych platformach, które mają jedynie 64-bitowy dostęp do plików i 32-bitowe identyfikatory użytkownika i grupy (np. alpha, ia64, s390x, x86-64), istnieje jedynie pojedyncza wersja wywołań systemowych związanych z UID-ami, GID-ami i dostępem do plików. Na platformach (zwykle 32-bitowych), gdzie istnieją wywołania *64 i *32, pozostałe wersje są przestarzałe.
Wywołania rt_sig* dodano w Linuksie 2.2 w celu obsługi sygnałów czasu rzeczywistego (zob. signal(7)). Te wywołania systemowe zastąpiły starsze wywołania o tej samej nazwie, jedynie bez przedrostka „rt_”.
Wywołania systemowe select(2) i mmap(2) używają pięciu lub więcej argumentów, co powodowało problemy, ze względu na sposób, w jaki zorganizowano przekazywanie argumentów na i386. Z tego względu, choć inne architektury mają sys_select() i sys_mmap() odpowiadające __NR_select i __NR_mmap, ma i386 można znaleźć w tym miejscu old_select() i old_mmap() (funkcje korzystające z wskaźnika do bloku argumentów). Obecnie przekazywanie pięciu argumentów nie jest już problemem, dlatego występuje __NR__newselect, które odpowiada bezpośrednio sys_select() i podobnie __NR_mmap2. s390x jest jedyną architekturą 64-bitową, która posiada old_mmap().

Szczegóły typowe dla architektury: Alpha

zwraca parę: identyfikator grupy i efektywny identyfikator grupy za pomocą rejestrów r0 i r20; zapewnione w zamian za getgid(2) i getegid(2).
zwraca parę: identyfikator procesu i efektywny identyfikator procesu za pomocą rejestrów r0 i r20; zapewnione w zamian za getpid(2) i getppid(2).
jest wariantem adjtimex(2) używającym struct timeval32, ze względu na kompatybilność z OSF/1.
zwraca parę: identyfikator użytkownika i efektywny identyfikator użytkownika za pomocą rejestrów r0 i r20; zapewnione w zamian za getuid(2) i geteuid(2).
służy do konfiguracji rejestru Host Address Extension na tanich komputerach Alpha, w celu uzyskania dostępu do przestrzeni adresowej poza pierwszymi 27 bitami.

ZOBACZ TAKŻE

ausyscall(1), intro(2), syscall(2), unimplemented(2), errno(3), libc(7), vdso(7)

TŁUMACZENIE

Tłumaczenie niniejszej strony podręcznika: Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.

2 maja 2024 r. Linux man-pages 6.9.1