syscalls(2) System Calls Manual syscalls(2) NAZWA syscalls - linuksowe wywolania systemowe SKLADNIA Linuksowe wywolania systemowe. OPIS Wywolanie systemowe jest podstawowym interfejsem pomiedzy aplikacja a jadrem Linux. Wywolania systemowe i biblioteczne funkcje opakowujace Wywolania systemowe nie sa zwykle wywolywane bezposrednio, lecz za posrednictwem funkcji opakowujacych glibc (lub jakiejs innej biblioteki). Szczegoly na temat bezposredniego przywolywania wywolan systemowych opisano w podreczniku intro(2). Czesto, lecz nie zawsze, nazwa funkcji opakowujacej jest taka sama, jak przywolywanego przez nia wywolania systemowego. Przykladowo glibc zawiera funkcje chdir() przywolujaca wywolanie systemowe ,,chdir". Funkcja opakowujaca glibc jest czesto skromna, nie robiac wiele poza skopiowaniem argumentow do prawidlowych rejestrow przed wywolaniem wywolania systemowego, a potem ustawiajac odpowiednio errno po powrocie wywolania systemowego (te same kroki sa wykonywane przez syscall(2), ktore moze sluzyc do przywolywania wywolan systemowych, ktore nie posiadaja funkcji opakowujacych). Uwaga: wywolanie systemowe zglasza niepowodzenie, zwracajac ujemny numer bledu do wywolujacego, na architekturach ktore nie posiadaja odrebnej flagi/rejestru bledow, jak to opisano w syscall(2); gdy tak sie stanie, funkcja opakowujaca zmienia znak zwracanego numeru bledu (staje sie on dodatni), kopiuje go do errno i zwraca -1 do wywolujacego funkcje opakowujaca. Czasem jednak, funkcja opakowujaca wykonuje dodatkowa prace przed przywolaniem wywolania systemowego. Na przyklad, istnieja obecnie (z powodow opisanych nizej) dwa spokrewnione wywolania systemowe: truncate(2) i truncate64(2), a funkcja opakowujaca glibc truncate() sprawdza, ktore z nich jest zapewnione przez jadro i okresla, ktorego nalezy uzyc. Lista wywolan systemowych Ponizej przedstawiono liste linuksowych wywolan systemowych. Kolumna Jadro wskazuje wersje jadra w przypadku wywolan, ktore pojawily sie w Linuksie 2.2 lub pozniej. Prosze odnotowac, ze: o Jesli nie wskazano wersji jadra, wywolanie systemowe pojawilo sie w Linuksie 1.0 lub wczesniej. o Jesli wywolanie systemowe oznaczono wersja ,,1.2" oznacza to, ze wywolanie systemowe prawdopodobnie pojawilo sie w wersji jadra Linux 1.1.x, czyli pierwsza wersja stabilna z danym wywolaniem byla wersja 1.2 (rozwoj Linuksa 1.2 rozpoczal sie od odgalezienia od wersji 1.0.6 Linuksa i trwal w ramach niestabilnej serii jader Linux 1.1.x). o Jesli wywolanie systemowe oznaczono wersja ,,2.0" oznacza to, ze wywolanie systemowe prawdopodobnie pojawilo sie w wersji jadra Linux 1.3.x, czyli pierwsza wersja stabilna z danym wywolaniem byla wersja 2.0 (rozwoj Linuksa 2.0 rozpoczal sie od odgalezienia od wersji 1.2.x, gdzies w okolicach wersji 1.2.10 Linuksa, i trwal w ramach niestabilnej serii jader Linux 1.3.x). o Jesli wywolanie systemowe oznaczono wersja ,,2.2" oznacza to, ze wywolanie systemowe prawdopodobnie pojawilo sie w wersji jadra Linux 2.1.x, czyli pierwsza wersja stabilna z danym wywolaniem byla wersja 2.2.0 (rozwoj Linuksa 2.2 rozpoczal sie od odgalezienia od wersji 2.0.21 Linuksa i trwal w ramach niestabilnej serii jader Linux 2.1.x). o Jesli wywolanie systemowe oznaczono wersja ,,2.4" oznacza to, ze wywolanie systemowe prawdopodobnie pojawilo sie w wersji jadra Linux 2.3.x, czyli pierwsza wersja stabilna z danym wywolaniem byla wersja 2.4.0 (rozwoj Linuksa 2.4 rozpoczal sie od odgalezienia od wersji 2.2.8 Linuksa i trwal w ramach niestabilnej serii jader Linux 2.3.x). o Jesli wywolanie systemowe oznaczono wersja ,,2.6" oznacza to, ze wywolanie systemowe prawdopodobnie pojawilo sie w wersji jadra Linux 2.5.x, czyli pierwsza wersja stabilna z danym wywolaniem byla wersja 2.6.0 (rozwoj Linuksa 2.6 rozpoczal sie od odgalezienia od wersji 2.4.15 Linuksa i trwal w ramach niestabilnej serii jader Linux 2.5.x). o Od wersji Linuksa 2.6.0, model rozwoju zmienil sie, a nowe wywolania systemowe moga pojawiac sie w kazdym wydaniu Linuksa 2.6.x. W takim przypadku podana jest dokladna wersja, w ktorej pojawilo sie dane wywolanie systemowe. Te konwencje stosuje sie rowniez: w serii jader Linux 3.x, ktora rozpoczela sie po Linuksie 2.6.39; w serii jader Linux 4.x, ktora rozpoczela sie po Linuksie 3.19; w serii jader Linux 5.x, ktora rozpoczela sie po Linuksie 4.20; w serii jader Linux 6.x, ktora rozpoczela sie po Linuksie 5.19. o W niektorych sytuacjach, wywolanie systemowe dodano do stabilnej serii jader po jej odgalezieniu z poprzedniej stabilnej serii jader, a nastepnie przeportowano do wczesniejszej stabilnej serii jader. Na przyklad czesc wywolan systemowych, ktore pojawily sie w Linuksie 2.6.x przeportowano rowniez do wydania Linux 2.4.x po Linuksie 2.4.15. W takim przypadku, podane sa wersje z obu glownych serii jader, w ktorych pojawilo sie dane wywolanie. Lista wywolan systemowych dostepnych w Linuksie 5.14 (w kilku przypadkach tylko na starszych jadrach) jest nastepujaca: Wywolanie systemowe Jadro Uwagi ----------------------------------------------------------------------- _llseek(2) 1.2 _newselect(2) 2.0 _sysctl(2) 2.0 Usuniete 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 Usuniete 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 Przestarzale (nieaktywne) od 2.6, usuniete w 5.15 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 szczegol. 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 Usuniete 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 Usuniete 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 Usuniete 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 (usuniete w 2.6.26), dostepne 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, bylo 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; przestarzale 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 szczegol. 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 Usuniete 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) uzywajacy innej wartosci 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) wywolania 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 Wczesniej perf_counter_open() w 2.6.31; nowa nazwa w 2.6.32 personality(2) 1.2 perfctr(2) 2.2 Tylko SPARC; usuniete w 2.6.34 perfmonctl(2) 2.4 Tylko IA-64; usuniete 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 Usuniete 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 Przestarzale 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 (stala 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 Usuniete 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 Wciaz dostepne 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 Wczesniej ,,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, wywolania gniazd sa zwielokrotniane (za pomoca funkcji opakowujacych glibc) poprzez socketcall(2) i analogicznie wywolania IPC Systemu V sa zwielokrotniane poprzez ipc(2). Dla nastepujacych wywolan systemowych zarezerwowano miejsca w systemowej tablicy wywolan, ale nie sa one zaimplementowane w standardowym jadrze: 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. tez unimplemented(2)). Jednak ftime(3), profil(3) i ulimit(3) istnieja jako funkcje biblioteczne. Miejsce dla phys(2) od Linuksa 2.1.116 jest uzywane przez umount(2); phys(2) nigdy nie zostanie zaimplementowane. Wywolania getpmsg(2) i putpmsg(2) sa przeznaczone do jader zmodyfikowanych do obslugi struktury STREAMS i moga nigdy nie trafic do standardowego jadra. Istnialo przez chwile set_zone_reclaim(2), dodane w Linuksie 2.6.13 i usuniete w Linuksie 2.6.16; to wywolanie systemowe nigdy nie bylo dostepne dla przestrzeni uzytkownika. Wywolania systemowe na usunietych portach Niektore wywolania systemowe istnialy tylko na architekturach Linuksa, ktore zostaly juz usuniete z jadra: Blackfin (port usuniety w Linuksie 4.17) o bfin_spinlock(2) (dodane w Linuksie 2.6.22) o dma_memcpy(2) (dodane w Linuksie 2.6.22) o sram_alloc(2) (dodane w Linuksie 2.6.22) o sram_free(2) (dodane w Linuksie 2.6.22) Metag (port usuniety w Linuksie 4.17) o metag_get_tls(2) (dodane w Linuksie 3.9) o metag_set_fpu_flags(2) (dodane w Linuksie 3.9) o metag_set_tls(2) (dodane w Linuksie 3.9) o metag_setglobalbit(2) (dodane w Linuksie 3.9) Tile (port usuniety w Linuksie 4.17) o cmpxchg_badaddr(2) (dodane w Linuksie 2.6.36) UWAGI Najczesciej kod nalezacy do wywolania systemowego o numerze __NR_xxx zdefiniowanym w /usr/include/asm/unistd.h mozna znalezc w zrodlach jadra Linux w funkcji sys_xxx(). Istnieje jednak wiele wyjatkow, glownie z powodu zastapienia starszych wywolan systemowych nowszymi, co odbylo sie w nie do konca systematyczny sposob. Na platformach z zastrzezona emulacja systemu operacyjnego, takich jak sparc, sparc64 i alpha, istnieje wiele dodatkowych wywolan systemowych; mips64 zawiera rowniez pelny zbior 32-bitowych wywolan systemowych. Z czasem, konieczna byla zmiana interfejsow niektorych wywolan systemowych. Jedna z przyczyn byla koniecznosc zwiekszenia struktur wartosci skalarnych przekazywanych do wywolan systemowych. Z powodow tych zmian, niektore architektury (miedzy innymi dlugowieczne architektury 32-bitowe, takie jak i386) maja obecnie grupy powiazanych wywolan systemowych (np. truncate(2) i truncate64(2)) realizujacych podobne zadania, lecz rozniacych sie w szczegolach, takich jak rozmiar swoich argumentow (jak zaznaczono wczesniej, aplikacje zwykle nie sa tego swiadome; funkcje opakowujace glibc wykonuja pewna prace, aby przywolac odpowiednie wywolanie systemowe oraz zapewnic kompatybilnosc ABI dla starszych plikow wykonywalnych). Oto przyklady wywolan systemowych, ktore istnieja w roznych wersjach: o Obecnie wystepuja trzy rozne wersje stat(2): sys_stat() (miejsce __NR_oldstat), sys_newstat() (miejsce __NR_stat) i sys_stat64() (miejsce __NR_stat64), z ktorych ostatnia jest najnowsza. Podobna sytuacja wystepuje w przypadku lstat(2) i fstat(2). o Podobnie, definicje __NR_oldolduname, __NR_olduname i __NR_uname odnosza sie do funkcji sys_olduname(), sys_uname() i sys_newuname(). o W Linuksie 2.0, pojawila sie nowa wersja vm86(2), przy czym stara i nowa funkcja otrzymala nazwe, odpowiednio, sys_vm86old() i sys_vm86(). o W Linuksie 2.4, pojawila sie nowa wersja getrlimit(2), przy czym stara i nowa funkcja otrzymala nazwe, odpowiednio, sys_old_getrlimit() (miejsce __NR_getrlimit) i sys_getrlimit() (miejsce __NR_ugetrlimit). o Linux 2.4 zwiekszyl rozmiar identyfikatorow uzytkownika i grupy z 16 do 32 bitow. Aby obsluzyc te zmiane, dodano wiele wywolan systemowych (np. chown32(2), getuid32(2), getgroups32(2), setresuid32(2)), zastepujacych wczesniejsze wywolania o tej samej nazwie, bez przyrostka ,,32". o Linux 2.4 dodal obsluge dostepu do duzych plikow dla aplikacji 32-bitowych (tj. plikow, ktorych rozmiaru i przesuniecia pliku nie da sie odwzorowac w 32 bitach). Aby obsluzyc te zmiane, konieczne bylo zastapienie wywolan systemowych, ktore dzialaja na przesunieciach plikow i ich rozmiarach. Z tego wzgledu dodano wywolania systemowe: fcntl64(2), getdents64(2), stat64(2), statfs64(2), truncate64(2) oraz ich odpowiedniki dzialajace na deskryptorach plikow i dowiazaniach symbolicznych. Opisywane wywolania zastapily starsze wywolania systemowe, ktore, z wylaczeniem wywolan ,,stat", mialy te same nazwy, jedynie bez przyrostka ,,64". Na nowszych platformach, ktore maja jedynie 64-bitowy dostep do plikow i 32-bitowe identyfikatory uzytkownika i grupy (np. alpha, ia64, s390x, x86-64), istnieje jedynie pojedyncza wersja wywolan systemowych zwiazanych z UID-ami, GID-ami i dostepem do plikow. Na platformach (zwykle 32-bitowych), gdzie istnieja wywolania *64 i *32, pozostale wersje sa przestarzale. o Wywolania rt_sig* dodano w Linuksie 2.2 w celu obslugi sygnalow czasu rzeczywistego (zob. signal(7)). Te wywolania systemowe zastapily starsze wywolania o tej samej nazwie, jedynie bez przedrostka ,,rt_". o Wywolania systemowe select(2) i mmap(2) uzywaja pieciu lub wiecej argumentow, co powodowalo problemy, ze wzgledu na sposob, w jaki zorganizowano przekazywanie argumentow na i386. Z tego wzgledu, choc inne architektury maja sys_select() i sys_mmap() odpowiadajace __NR_select i __NR_mmap, ma i386 mozna znalezc w tym miejscu old_select() i old_mmap() (funkcje korzystajace z wskaznika do bloku argumentow). Obecnie przekazywanie pieciu argumentow nie jest juz problemem, dlatego wystepuje __NR__newselect, ktore odpowiada bezposrednio sys_select() i podobnie __NR_mmap2. s390x jest jedyna architektura 64-bitowa, ktora posiada old_mmap(). Szczegoly typowe dla architektury: Alpha getxgid(2) zwraca pare: identyfikator grupy i efektywny identyfikator grupy za pomoca rejestrow r0 i r20; zapewnione w zamian za getgid(2) i getegid(2). getxpid(2) zwraca pare: identyfikator procesu i efektywny identyfikator procesu za pomoca rejestrow r0 i r20; zapewnione w zamian za getpid(2) i getppid(2). old_adjtimex(2) jest wariantem adjtimex(2) uzywajacym struct timeval32, ze wzgledu na kompatybilnosc z OSF/1. getxuid(2) zwraca pare: identyfikator grupy i efektywny identyfikator grupy za pomoca rejestrow r0 i r20; zapewnione w zamian za getuid(2) i geteuid(2). sethae(2) sluzy do konfiguracji rejestru Host Address Extension na tanich komputerach Alpha, w celu uzyskania dostepu do przestrzeni adresowej poza pierwszymi 27 bitami. ZOBACZ TAKZE intro(2), syscall(2), unimplemented(2), errno(3), libc(7), vdso(7), ausyscall(8) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.18 8 lutego 2026 r. syscalls(2)