システムコールとライブラリのラッパー関数
システムコールは一般には直接起動されず、 glibc (や他の何らかのライブラリ) 経由で起動される。システムコールの直接起動については、詳細は
intro(2) を参照のこと。いつもという訳ではないが、普通は、ラッパー関数の名前はその関数が起動するシステムコールの名前と同じである。例えば、glibc には
truncate() という関数があり、この関数は "truncate"システムコールを起動する。
たいていの場合、glibc のラッパー関数はかなり簡単なもので、システムコールを起動する前に引き数を適切なレジスタにコピーし、システムコールが返った後は
errno を適切に設定する以外は、ほとんど処理を行わない (これらは、ラッパー関数が提供されていない場合にシステムコールを起動するのに使用する
syscall(2) により実行される処理と同じである)。 [注意] システムコールは失敗を示すのに負のエラー番号を呼び出し元に返す。失敗が起こった際には、ラッパー関数は返されたエラー番号を反転して (正の値に変換し)、それを
errno にコピーし、ラッパー関数の呼び出し元に-1 を返す。
しかしながら、時には、ラッパー関数がシステムコールを起動する前に何らかの追加の処理を行う場合がある。例えば、現在、二つの関連するシステムコール
truncate(2) と
truncate64(2) があり、glibc のラッパー関数
truncate() は、カーネルがこれらのシステムコールのうちどちらを提供しているかをチェックし、どちらを採用するかを決定する。
システムコールのリスト
以下は Linux のシステムコールのリストである。このリストで、
Kernel の列は、Linux 2.2 以降で登場したシステムコールが登場したカーネルバージョンを示す。以下に詳細な説明を記す。
-
*
-
カーネルバージョンがない場合、そのシステムコールはカーネル 1.0 もしくはそれ以前に登場した。
-
*
-
システムコールに "1.2"と書かれている場合、そのシステムコールがおそらくバージョン 1.1.x のカーネルで登場し、安定版のカーネルでは 1.2 で初めて登場したことを意味する。 (バージョン 1.2 のカーネルは、カーネル 1.0.6 から分岐し、バージョン 1.1.x の不安定版のカーネル系列として開発された。)
-
*
-
システムコールに "2.0"と書かれている場合、そのシステムコールがおそらくバージョン 1.3.x のカーネルで登場し、安定版のカーネルでは 2.0 で初めて登場したことを意味する。 (バージョン 2.0 のカーネルは、バージョン 1.2.10 あたりのカーネル 1.2.x から分岐し、バージョン 1.3.x の不安定版のカーネル系列として開発された。)
-
*
-
システムコールに "2.2"と書かれている場合、そのシステムコールがおそらくバージョン 2.1.x のカーネルで登場し、安定版のカーネルでは 2.2.0 で初めて登場したことを意味する。 (バージョン 2.2 のカーネルは、カーネル 2.0.21 から分岐し、バージョン 2.1.x の不安定版のカーネル系列として開発された。)
-
*
-
システムコールに "2.4"と書かれている場合、そのシステムコールがおそらくバージョン 2.3.x のカーネルで登場し、安定版のカーネルでは 2.4.0 で初めて登場したことを意味する。 (バージョン 2.4 のカーネルは、カーネル 2.2.8 から分岐し、バージョン 2.3.x の不安定版のカーネル系列として開発された。)
-
*
-
システムコールに "2.6"と書かれている場合、そのシステムコールがおそらくバージョン 2.5.x のカーネルで登場し、安定版のカーネルでは 2.6.0 で初めて登場したことを意味する。 (バージョン 2.6 のカーネルは、カーネル 2.4.15 から分岐し、バージョン 2.5.x の不安定版のカーネル系列として開発された。)
-
*
-
カーネル 2.6.0 から開発モデルは変更され、新しいシステムコールが個々の 2.6.x のリリースでも登場するようになった。その場合、このリストでは、システムコールが登場した厳密なバージョン番号が記載されている。この慣習は、カーネル 2.6.39 の後継となるバージョン 3.x 系列のカーネルでも継続されている。
-
*
-
前の安定版カーネル系列から分岐した後に安定版カーネル系列にシステムコールが追加された場合、以前の安定版カーネル系列にそのシステムコールが移植 (backport) されることがある。例えば、2.6.x で登場したシステムコールのいくつかは、 2.4.15 以降の 2.4.x リリースにも backport された。この場合、システムコールが登場したバージョンとして、両方の安定版系列のバージョンが記載されている。
カーネル 3.9 で利用可能なシステムコールのリストを以下に示す (それ以前のカーネルでだけ利用可能なものも少数だが含まれる):
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.11 |
|
adjtimex(2) |
1.0 |
|
alarm(2) |
1.0 |
|
alloc_hugepages(2) |
2.5.36 |
2.5.44 で削除 |
bdflush(2) |
1.2 |
2.6 以降では非推奨 (何もしない) |
bind(2) |
2.0 |
socketcall(2) の「注意」の節を参照 |
brk(2) |
1.0 |
|
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 |
|
clone(2) |
1.0 |
|
close(2) |
1.0 |
|
connect(2) |
2.0 |
socketcall(2) の「注意」の節を参照 |
creat(2) |
1.0 |
|
create_module(2) |
|
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_wait(2) |
2.6 |
|
eventfd(2) |
2.6.22 |
|
eventfd2(2) |
2.6.27 |
|
execve(2) |
1.0 |
|
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 |
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 |
1.0 |
ftruncate(2) |
1.0 |
|
ftruncate64(2) |
2.4 |
|
futex(2) |
2.6 |
|
futimesat(2) |
2.6.16 |
|
get_kernel_syms(2) |
|
2.6 で削除 |
get_mempolicy(2) |
2.6.6 |
|
get_robust_list(2) |
2.6.17 |
|
get_thread_area(2) |
2.6 |
|
getcpu(2) |
2.6.19 |
|
getcwd(2) |
2.2 |
|
getdents(2) |
2.0 |
|
getdents64(2) |
2.4 |
|
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 |
|
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 |
|
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 |
|
getxattr(2) |
2.6; 2.4.18 |
|
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_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_load(2) |
2.6.13 |
|
keyctl(2) |
2.6.11 |
|
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 |
|
madvise1(2) |
2.4 |
|
mbind(2) |
2.6.6 |
|
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 |
|
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 |
|
nfsservctl(2) |
2.2 |
3.1 で削除 |
nice(2) |
1.0 |
|
oldfstat(2) |
1.0 |
|
oldlstat(2) |
1.0 |
|
oldolduname(2) |
1.0 |
|
oldstat(2) |
1.0 |
|
olduname(2) |
1.0 |
|
open(2) |
1.0 |
|
open_by_handle_at(2) |
2.6.39 |
|
openat(2) |
2.6.16 |
|
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 |
2.6.31 では perf_counter_open() という名前であった; 2.6.32 で名称変更 |
personality(2) |
1.2 |
|
perfctr(2) |
2.2 |
Sparc; 2.6.34 で削除 |
perfmonctl(2) |
2.4 |
ia64 |
pipe(2) |
1.0 |
|
pipe2(2) |
2.6.27 |
|
pivot_root(2) |
2.4 |
|
poll(2) |
2.0.36; 2.2 |
|
ppc_rtas(2) |
|
PowerPC のみ |
ppoll(2) |
2.6.16 |
|
prctl(2) |
2.2 |
|
pread64(2) |
|
2.2 で "pread"として追加; 2.6 で "pread64"に名称変更 |
preadv(2) |
2.6.30 |
|
prlimit(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 |
|
pwrite64(2) |
|
2.2 で "pwrite"として追加; 2.6 で "pwrite64"に名称変更 |
pwritev(2) |
2.6.30 |
|
query_module(2) |
2.2 |
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 |
|
removexattr(2) |
2.6; 2.4.18 |
|
rename(2) |
1.0 |
|
renameat(2) |
2.6.16 |
|
request_key(2) |
2.6.11 |
|
restart_syscall(2) |
2.6 |
|
rmdir(2) |
1.0 |
|
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 |
|
s390_runtime_instr(2) |
3.7 |
s390 のみ |
sched_get_priority_max(2) |
2.0 |
|
sched_get_priority_min(2) |
2.0 |
|
sched_getaffinity(2) |
2.6 |
|
sched_getparam(2) |
2.0 |
|
sched_getscheduler(2) |
2.0 |
|
sched_rr_get_interval(2) |
2.0 |
|
sched_setaffinity(2) |
2.6 |
|
sched_setparam(2) |
2.0 |
|
sched_setscheduler(2) |
2.0 |
|
sched_yield(2) |
2.0 |
|
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 |
|
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 |
|
sethostname(2) |
1.0 |
|
setitimer(2) |
1.0 |
|
setns(2) |
3.0 |
|
setpgid(2) |
1.0 |
|
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) |
|
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) の「注意」の節を参照 |
splice(2) |
2.6.17 |
|
spu_create(2) |
2.6.16 |
PowerPC のみ |
spu_run(2) |
2.6.16 |
PowerPC のみ |
ssetmask(2) |
1.0 |
|
stat(2) |
1.0 |
|
stat64(2) |
2.4 |
|
statfs(2) |
1.0 |
|
statfs64(2) |
2.6 |
|
stime(2) |
1.0 |
|
subpage_prot(2) |
2.6.25 |
PowerPC で |
|
|
CONFIG_PPC_64K_PAGES の場合 |
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 |
アーキテクチャ固有の sync_file_range(2) の一種 |
syncfs(2) |
2.6.39 |
|
sysfs(2) |
1.2 |
|
sysinfo(2) |
1.0 |
|
syslog(2) |
1.0 |
|
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 |
|
utime(2) |
1.0 |
|
utimensat(2) |
2.6.22 |
|
utimes(2) |
2.2 |
|
utrap_install(2) |
2.2 |
Sparc |
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 |
|
x86-32 を含む多くのプラットフォームでは、ソケット関連のシステムコールは (glibc のラッパー関数を介してだが) すべて socketcall(2) 経由に多重されている。同様に、System V IPC 関連のシステムコールは 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 で削除された。このシステムコールがユーザ空間から使える状態になったことはない。