syscalls - システムコールの説明 - Linux コマンド集 一覧表
名前
none - システムコールのリスト
書式
Linux 2.4 システムコール。
説明
システムコールは、アプリケーションと Linux カーネルとの間の
基本的なインタフェースである。
Linux 2.4.17 では、
/usr/src/linux/include/asm-*/unistd.h
に 1100 のシステムコールが列挙されている。
この man ページでは、多くのプラットフォームで共通に存在するものを
載せている。
_llseek(2),
_newselect(2),
_sysctl(2),
accept(2),
access(2),
acct(2),
adjtimex(2),
afs_syscall,
alarm(2),
bdflush(2),
bind(2),
break,
brk(2),
cacheflush(2),
capget(2),
capset(2),
chdir(2),
chmod(2),
chown(2), chown32,
chroot(2),
clone(2),
close(2),
connect(2),
creat(2),
create_module(2),
delete_module(2),
dup(2),
dup2(2),
execve(2),
exit(2),
fchdir(2),
fchmod(2),
fchown(2), fchown32,
fcntl(2), fcntl64,
fdatasync(2),
flock(2),
fork(2),
fstat(2), fstat64,
fstatfs(2),
fsync(2),
ftime,
ftruncate(2), ftruncate64,
get_kernel_syms(2),
getcwd(2),
getdents(2), getdents64,
getegid(2), getegid32,
geteuid(2), geteuid32,
getgid(2), getgid32,
getgroups(2), getgroups32,
getitimer(2),
getpagesize(2),
getpeername(2),
getpmsg,
getpgid(2),
getpgrp(2),
getpid(2),
getppid(2),
getpriority(2),
getresgid(2), getresgid32,
getresuid(2), getresuid32,
getrlimit(2),
getrusage(2),
getsid(2),
getsockname(2),
getsockopt(2),
gettid,
gettimeofday(2),
getuid(2), getuid32,
gtty,
idle,
init_module(2),
ioctl(2),
ioperm(2),
iopl(2),
ipc(2),
kill(2),
lchown(2), lchown32,
link(2),
listen(2),
lock,
lseek(2),
lstat(2), lstat64,
madvise(2),
mincore(2),
mkdir(2),
mknod(2),
mlock(2),
mlockall(2),
mmap(2),
modify_ldt(2),
mount(2),
mprotect(2),
mpx,
mremap(2),
msync(2),
munlock(2),
munlockall(2),
munmap(2),
nanosleep(2),
nfsservctl(2),
nice(2),
oldfstat, oldlstat, oldolduname, oldstat, oldumount, olduname,
open(2),
pause(2),
personality(2),
phys,
pipe(2),
pivot_root(2),
poll(2),
prctl(2),
pread(2),
prof, profil,
ptrace(2),
putpmsg,
pwrite(2),
query_module(2),
quotactl(2),
read(2),
readahead,
readdir(2),
readlink(2),
readv(2),
reboot(2),
recv(2), recvfrom(2), recvmsg(2),
rename(2),
rmdir(2),
rt_sigaction,
rt_sigpending,
rt_sigprocmask,
rt_sigqueueinfo,
rt_sigreturn,
rt_sigsuspend,
rt_sigtimedwait,
sched_get_priority_max(2),
sched_get_priority_min(2),
sched_getparam(2),
sched_getscheduler(2),
sched_rr_get_interval(2),
sched_setparam(2),
sched_setscheduler(2),
sched_yield(2),
security,
select(2),
sendfile(2),
send(2), sendmsg(2), sendto(2),
setdomainname(2),
setfsgid(2), setfsgid32,
setfsuid(2), setfsuid32,
setgid(2), setgid32,
setgroups(2), setgroups32,
sethostname(2),
setitimer(2),
setpgid(2),
setpriority(2),
setregid(2), setregid32,
setresgid(2), setresgid32,
setresuid(2), setresuid32,
setreuid(2), setreuid32,
setrlimit(2),
setsid(2),
setsockopt(2),
settimeofday(2),
setuid(2), setuid32,
setup(2),
sgetmask(2),
shutdown(2),
sigaction(2),
sigaltstack(2),
signal(2),
sigpending(2),
sigprocmask(2),
sigreturn(2),
sigsuspend(2),
socket(2),
socketcall(2),
socketpair(2),
ssetmask(2),
stat(2), stat64,
statfs(2),
stime(2),
stty,
swapoff(2),
swapon(2),
symlink(2),
sync(2),
sysfs(2),
sysinfo(2),
syslog(2),
time(2),
times(2),
truncate(2), truncate64,
ulimit,
umask(2),
umount(2),
uname(2),
unlink(2),
uselib(2),
ustat(2),
utime(2),
vfork(2),
vhangup(2),
vm86(2),
vm86old,
wait4(2),
waitpid(2),
write(2),
writev(2).
上記のうち、
getrlimit, oldfstat, oldlstat, oldolduname, oldstat, olduname,
readdir, select, vm86old
の 9 個は、廃止されている
(
obsolete
(2)も参照)。
afs_syscall, break, ftime, getpmsg, gtty, idle, lock, mpx, phys,
prof, profil, putpmsg, security, stty, ulimit
の 15 個は、標準のカーネルには実装されていない
(
unimplemented
(2)も参照)。
しかし、
ftime
(3),
profil
(3),
ulimit
(3) はライブラリ・ルーチンとして実装されている。
phys 用の場所は 2.1.116 以降では umount2 用に使用されている;
将来においても phys は実装されない。
getpmsg と putpmsg は、ストリームに対応するためにパッチが当てられた
カーネル用のもので、標準のカーネルでは決して用いられない。
security は将来の使用のため予約されている。
たいていは、
/usr/include/asm/unistd.h
で定義されている番号 __NR_xxx のシステムコールのコードは、
カーネル・ソースの
sys_xxx
()というルーチンに書かれている
(i386 における実行テーブルは
/usr/src/linux/arch/i386/kernel/entry.S
に書かれている)。
しかしこれには多くの例外がある。古いシステムコールは新版に置き換えられて
きたが、この置き換えはあまり体系立てて行われて来なかったからである。
parisc, sparc, sparc64, alpha といったプロプリエタリ OS のエミュレーション
機能があるプラットフォームでは、多くの追加システムコールがある。
mips64 には、32 ビットシステムコールのフルセットも含まれている。
以下は Linux 2.4.17 における詳細である。
__NR_oldstat と __NR_stat という定義は、それぞれ
sys_stat() と sys_newstat() というルーチンを参照している。
fstat
と
lstat
についても同様である。
また、 __NR_oldolduname, __NR_olduname, __NR_uname という定義は、それぞれ
sys_olduname(), sys_uname(), sys_newuname() というルーチンを参照している。
このように __NR_stat と __NR_uname は常にそのシステムコールの
最新バージョンを参照しており、古いバージョンも下位互換性のために
残されている。
select
と
mmap
では状況が異なる。
これらは 5つもしくはそれ以上のパラメータを使用しており、
i386 ではパラメータの受け渡しに問題が生じる。
そのため、他のアーキテクチャでは __NR_select と __NR_mmap に
対応する sys_select() と sys_mmap() が存在するが、
i386 では代わりに old_select() と old_mmap() というルーチンがある
(これらのルーチンはパラメータ・ブロックへのポインタを使用する)。
現在では 5つのパラメータを渡すことはもはや問題ではなくなっており、
(libc 6 で使用される) __NR__newselect は直接 sys_select() に対応する
ようになっている。 __NR_mmap2 についても同様である。
__NR__llseek と __NR__sysctl の 2つのシステムコール番号に対応する
ルーチンは sys_llseek() と sys_sysctl() であり、ルーチン名の方が
アンダースコアの数が少ない。
__NR_readdir というシステムコール番号があり、これは old_readdir()
に対応している。このルーチンは一回につき一つのディレクトリしか読み込めない。
これは sys_getdents() によって置き換えられている。
i386 を含む多くのプラットフォームでは、
ソケット関係のシステムコールはすべて socketcall() 経由に、
System V IPC コールは ipc() 経由に多重化されている。
64-bit ファイルアクセスと 32-bit UID のみを持つ
新しいプラットフォーム (alpha, ia64, s390x など) では、
*64 や *32 という名前のシステムコールはない。
*64 や *32 というシステムコールが存在する場合、
*64 や *32 がついていないシステムコールは廃止扱いである。
chown システムコールと lchown システムコールは 2.1.81 で入れ替えられた。
*64 と *32 システムコールは、カーネル 2.4 で追加された。
カーネル 2.4 では、 getrlimit と mmap の新しいバージョンおよび、
新しいシステムコールである pivot_root, mincore, madvise,
security, gettid, readahead も付け加えられた。