심심하니까 시리즈 번역물을 만들어 보기로 한다. 또하나의 장기 프로젝트 - 리눅스 매뉴얼 페이지, MAN
syscalls(2) - Linux manual page
syscalls - Linux system calls
Linux system calls
시스템콜이라 함은 리눅스 커널과 애플리케이션 사이의 기반 인터페이스를 의미한다.
애플리케이션에서 시스템콜을 직접 호출하는 경우는 많지않다. 대신 glibc(또는 다른 라이브러리)에 내장된 래퍼 함수를 통해 호출된다. 시스템콜을 직접 호출하는 방법에 대해 알고 싶다면, 다음을 참조하자. 항상은 아니지만 대부분의 경우, 라이브러리에 내장된 래퍼 함수의 이름은 호출하고자 하는 시스템콜의 이름과 동일하다. 예를들면 glibc는 chdir()이라는 함수를 제공하는데 이는 “chdir” 이라는 시스템콜과 이름이 같다.
일반적으로 glibc 내장 래퍼 함수는 매우 간략한 구조를 가진다. 시스템콜을 호출하기 전에 필요한 필요한 인자(arguments)를 올바른 레지스터에 복사하고, 시스템콜의 리턴을 바탕으로 errno(3)를 정확하게 설정하는 정도의 역할을 수행한다. (래퍼 함수가 없이 직접 시스템콜을 호출할때 syscall(2)은 이와 동일한 방법과 절차로 시스템콜을 호출한다. 노트 syscall(2)에 명시된 별도의 분리된 에러 레지스터/플래그가 없는 아키텍처에서는 실패한 시스템콜 호출의 결과로 음수(negative)의 에러 번호를 리턴한다. 아무튼 이런 시스템콜 호출 실패가 발생하면 래퍼 함수는 시스템콜로 부터 리턴된 에러 번호에 다시 (-)를 곱하고(양수로 만들기 위해), 이를 errno로 복사한 후 래퍼를 호출한 함수에 -1을 리턴한다.
래퍼 함수는 시스템콜을 호출하기전에 위에 설명한 기본 동작에 더하여 추가적인 작업을 수행하기도 한다. 예를 들면, (아래에 설명한 이유로 인해) 최근에는 truncate(2)와 truncate64(2) 처럼 하나의 시스템에 두개의 시스템콜이 동시에 존재하는 경우, glibc의 truncate() 래퍼 함수가 호출 되었을때 이 두개의 시스템콜중 어떤것이 시스템에서 유효한지 확인한후 올바른 시스템콜을 선택하는 작업이다.
아래는 리눅스 시스템콜 리스트에 대해 기술했다. 리스트에서 Kernel 컬럼은 새롭게 소개된 시스템콜이 어떠한 커널 버전 부터 제공되었는지를 표시한다. 다음의 사항들을 참고:
커널 5.11에 제공되는 (오래된 커널 버전에는 더 적은) 시스템콜 리스트는 아래와 같다.
System call | Kernel | Notes |
---|---|---|
_llseek(2) | 1.2 | |
_newselect(2) | 2.0 | |
_sysctl(2) | 2.0 | Removed in 5.5 |
accept(2) | 2.0 | See notes on 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 | Removed in 2.5.44 |
arc_gettls(2) | 3.9 | ARC only |
arc_settls(2) | 3.9 | ARC only |
arc_usr_cmpxchg(2) | 4.9 | ARC only |
arch_prctl(2) | 2.6 | x86_64, x86 since 4.12 |
atomic_barrier(2) | 2.6.34 | m68k only |
atomic_cmpxchg_32(2) | 2.6.34 | m68k only |
bdflush(2) | 1.2 | Deprecated (does nothing) since 2.6 |
bind(2) | 2.0 | See notes on socketcall(2) |
bpf(2) | 3.18 | |
brk(2) | 1.0 | |
breakpoint(2) | 2.2 | ARM OABI only, defined with _ARM_NR prefix |
cacheflush(2) | 1.2 | Not on x86 |
capget(2) | 2.2 | |
capset(2) | 2.2 | |
chdir(2) | 1.0 | |
chmod(2) | 1.0 | |
chown(2) | 2.2 | See chown(2) for version details |
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 only |
clone(2) | 1.0 | |
clone3(2) | 5.3 | |
close(2) | 1.0 | |
close_range(2) | 5.9 | |
connect(2) | 2.0 | See notes on socketcall(2) |
copy_file_range(2) | 4.5 | |
creat(2) | 1.0 | |
create_module(2) | 1.0 | Removed in 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 | SPARC/SPARC64 only, for compatibility with 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 | Removed in 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 | Removed in 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 only, has __ARM_NR prefix |
getcpu(2) | 2.6.19 | |
getcwd(2) | 2.2 | |
getdents(2) | 2.0 | |
getdents64(2) | 2.4 | |
getdomainname(2) | 2.2 | SPARC, SPARC64; available as osf_getdomainname(2) on Alpha since Linux 2.0 |
getdtablesize(2) | 2.0 | SPARC (removed in 2.6.26), available on Alpha as 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, was available on SPARC up to Linux 2.6.26 |
getitimer(2) | 1.0 | |
getpeername(2) | 2.0 | See notes on socketcall(2) |
getpagesize(2) | 2.0 | Not on 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 | See notes on socketcall(2) |
getsockopt(2) | 2.0 | See notes on 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 only; deprecated |
getxattr(2) | 2.6; 2.4.18 | |
getxgid(2) | 2.0 | Alpha only; see NOTES |
getxpid(2) | 2.0 | Alpha only; see NOTES |
getxuid(2) | 2.0 | Alpha only; see NOTES |
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 | SPARC64 only |
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 | See chown(2) for version details |
lchown32(2) | 2.4 | |
lgetxattr(2) | 2.6; 2.4.18 | |
link(2) | 1.0 | |
linkat(2) | 2.6.16 | |
listen(2) | 2.0 | See notes on 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 only |
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_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 | See notes on ipc(2) |
msgget(2) | 2.0 | See notes on ipc(2) |
msgrcv(2) | 2.0 | See notes on ipc(2) |
msgsnd(2) | 2.0 | See notes on 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 | See stat(2) |
nfsservctl(2) | 2.2 | Removed in 3.1 |
nice(2) | 1.0 | |
old_adjtimex(2) | 2.0 | Alpha only; see NOTES |
old_getrlimit(2) | 2.4 | Old variant of getrlimit(2) that used a different value for RLIM_INFINITY |
oldfstat(2) | 1.0 | |
oldlstat(2) | 1.0 | |
oldolduname(2) | 1.0 | |
oldstat(2) | 1.0 | |
oldumount(2) | 2.4.116 | Name of the old unmount(2) syscall on 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 | OpenRISC 1000 only |
pause(2) | 1.0 | |
pciconfig_iobase(2) | 2.2.15; 2.4 | Not on x86 |
pciconfig_read(2) | 2.0.26; 2.2 | Not on x86 |
pciconfig_write(2) | 2.0.26; 2.2 | Not on x86 |
perf_event_open(2) | 2.6.31 | Was perf_counter_open() in 2.6.31; renamed in 2.6.32 |
personality(2) | 1.2 | |
perfctr(2) | 2.2 | SPARC only; removed ㅑㅜ 2.6.34 |
perfmonctl(2) | 2.4 | IA-64 only |
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) | Added as “pread” in 2.2; renamed “pread64” in 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) | Added as “pwrite” in 2.2; renamed “pwrite64” in 2.6 | |
pwritev(2) | 2.6.30 | |
pwritev2(2) | 4.6 | |
query_module(2) | 2.2 | Removed in 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 | See notes on socketcall(2) |
recvfrom(2) | 2.0 | See notes on socketcall(2) |
recvmsg(2) | 2.0 | See notes on socketcall(2) |
recvmmsg(2) | 2.6.33 | |
remap_file_pages(2) | 2.6 | Deprecated since 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 only |
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 only |
s390_runtime_instr(2) | 3.7 | s390 only |
s390_pci_mmio_read(2) | 3.19 | s390 only |
s390_pci_mmio_write(2) | 3.19 | s390 only |
s390_sthyi(2) | 4.15 | s390 only |
s390_guarded_storage(2) | 4.12 | s390 only |
sched_get_affinity(2) | 2.6 | Name of sched_getaffinity(2) on SPARC and 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 | Name of sched_setaffinity(2) on SPARC and 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 | See notes on ipc(2) |
semget(2) | 2.0 | See notes on ipc(2) |
semop(2) | 2.0 | See notes on ipc(2) |
semtimedop(2) | 2.6; 2.4.22 | |
send(2) | 2.0 | See notes on socketcall(2) |
sendfile(2) | 2.2 | |
sendfile64(2) | 2.6; 2.4.19 | |
sendmmsg(2) | 3.0 | |
sendmsg(2) | 2.0 | See notes on socketcall(2) |
sendto(2) | 2.0 | See notes on 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 only (constant has __ARM_NR prefix) |
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 only; see NOTES |
sethostname(2) | 1.0 | |
setitimer(2) | 1.0 | |
setns(2) | 3.0 | |
setpgid(2) | 1.0 | |
setpgrp(2) | 2.0 | Alternative name for setpgid(2) on 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 | See notes on socketcall(2) |
settimeofday(2) | 1.0 | |
setuid(2) | 1.0 | |
setuid32(2) | 2.4 | |
setup(2) | 1.0 | Removed in 2.2 |
setxattr(2) | 2.6; 2.4.18 | |
sgetmask(2) | 1.0 | |
shmat(2) | 2.0 | See notes on ipc(2) |
shmctl(2) | 2.0 | See notes on ipc(2) |
shmdt(2) | 2.0 | See notes on ipc(2) |
shmget(2) | 2.0 | See notes on ipc(2) |
shutdown(2) | 2.0 | See notes on 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 | See notes on socketcall(2) |
socketcall(2) | 1.0 | |
socketpair(2) | 2.0 | See notes on socketcall(2) |
spill(2) | 2.6.13 | Xtensa only |
splice(2) | 2.6.17 | |
spu_create(2) | 2.6.16 | PowerPC/PowerPC64 only |
spu_run(2) | 2.6.16 | PowerPC/PowerPC64 only |
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 only |
swapcontext(2) | 2.6.3 | PowerPC/PowerPC64 only |
switch_endian(2) | 4.1 | PowerPC64 only |
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 only |
syscall(2) | 1.0 | Still available on ARM OABI and MIPS O32 ABI |
sysfs(2) | 1.2 | |
sysinfo(2) | 1.0 | |
syslog(2) | 1.0 | |
sysmips(2) | 2.6.0 | MIPS only |
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 only |
usr32(2) | 2.4.8.1 | ARM OABI only |
utime(2) | 1.0 | |
utimensat(2) | 2.6.22 | |
utimes(2) | 2.2 | |
utrap_install(2) | 2.2 | SPARC64 only |
vfork(2) | 2.2 | |
vhangup(2) | 1.0 | |
vm86old(2) | 1.0 | Was “vm86”; renamed in 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 only |
x86-32를 포함한 많은 플랫폼에서 소켓콜은 모두 socketcall(2) (glibc 래퍼 함수)를 사용하여 멀티플렉스 되었으며, System V IPC 콜은 ipc(2)를 통해 멀티플렉스 되었다.
위의 테이블에서 몇몇 슬롯이 공백으로 예약 되어 있으나 (역주 마크다운으로 바꾸면서 공백 지웠음, 나중에 각각의 시스템콜을 번역하면서 추가예정), 다음의 시스템콜은 향후 일반 커널에 추가되지 않을 예정이다. afs_syscall(2), break(2), ftime(2), getpmsg(2), gtty(2), idle(2), lock(2), madvisel(2), mpx(2), phys(2), prof(2), profil(2), putpmsg(2), security(2), stty(2), tuxcall(2), ulimit(2), and 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)*는 2.6.13에 추가되었지만, 2.6.16에서 제거되었다. 이 시스템콜은 유저스페이스에 제공된 적은 없다.
특정 리눅스 아키텍처에 존재했으나 삭제된 시스템콜
AVR32 (리눅스 4.12 이후 삭제)
Blackfin (리눅스 4.17 이후 삭제)
Metag (리눅스 4.17이후 삭제)
Tile (리눅스 4.17이후 삭제)
대략적으로 시스템콜과 상수 __NR_xxx의 선언 코드는 리눅스 커널 소스 /usr/include/asm/unistd.h파일의 sys_xxx() 루틴에서 찾아볼 수 있다. 이 안에서는 매우 많은 예외를 찾아볼 수 있는데, 이는 다소 비체계적인 방식으로 오래된 시스템콜을 새로운 시스템콜로 대체하는 과정에서 발생된 것입다. 우선 순위를 가진 플랫폼들, 이를테면 sparc, sparc64 그리고 alpha와 같은 운영체제 에뮬레이션에서는 보다 많은 시스템콜이 추가되었다; mips64 역시 32-bit 시스템콜 전체를 포함하고 있다.
많은 시간이 흐르면서 일부 시스템콜의 인터페이스 변화 역시 필수적인것이었다. 매우 공통적 이유중 하나는 구조체의 크기를 늘리거나 시스템콜에 전달해야 하는 스칼라 값의 증가가 필요했기 때문이다. 이러한 변화로 인해 일부 아키텍처(오랫동안 지속되었던 i386기반의 32-bit 아키텍처)에서는 오늘날 매우 다양한 그룹의 관련 시스템콜을 찾아볼수 있으며 (예를 들면 truncate(2), truncate64(2)) 비슷한 작업을 처리하지만 인자의 크기와 같은 세부 구현은 다르다. (앞에서 언급한 바와 같이 일반적으로 애플리케이션에서는 이러한 구분을 생각할 필요가 없다: glibc 래퍼 함수가 이러한 작업을 선처리하여 올바른 시스템콜이 호출되도록 지원하며, 오래된 바이너리를 위한 ABI 호환성을 처리해주기 때문이다.) 다양한 버전으로 존재하는 시스템콜에 대한 예제들은 다음과 같다.
64-bit 파일 접근 또는 32-bit UIDs/GIDs중 단 하나만을 지원하는 최근의 플랫폼에서는 (예: alpha, ia64, s390x, x86-64) 한개의 버전만이 GIDs/UIDs 및 파일 접근 시스템콜을 위해 제공된다. (일반적으로 32비트 플랫폼들에서) *64와 *32 두가지 모두 존재하는 플랫폼에서 둘중의 하나는 사용되지 않는다. 역주 32비트와 64비트 모두 존재하는 아키텍처에서 커널은 두가지 버전 모두를 지원하는 시스템콜을 제공하지만, 실제 시스템에 따라 둘중의 하나만 사용된다는 의미.
intro(2), syscall(2), unimplemented(2), errno(3), libc(7), vdso(7)
이 페이지는 리눅스 매뉴얼 페이지 프로젝트 5.11 릴리즈의 일부이다. 프로젝트의 상세 설명, 버그 리포트 및 본 페이지의 최신 버전에 대한 정보는 다음의 링크에서 확인할 수 있다.
https://www.kernel.org/doc/man-pages/