Man page - syscalls(2)

Packages contains this manual

Available languages:

en fr es pl ko ja ru de

Manual

SYSCALLS

名 前
書 式
説 明
シ ス テ ム コ ー ル と ラ イ ブ ラ リ の ラ ッ パ ー 関 数
シ ス テ ム コ ー ル の リ ス ト
System calls on removed ports
注 意
ア ー キ テ ク チ ャ ー 固 有 の 詳 細 : Alpha
関 連 項 目
こ の 文 書 に つ い て

名 前

syscalls - Linux の シ ス テ ム コ ー ル

書 式

Linux の シ ス テ ム コ ー ル 。

説 明

シ ス テ ム コ ー ル は 、 ア プ リ ケ ー シ ョ ン と Linux カ ー ネ ル と の 間 の 基 本 的 な イ ン タ ー フ ェ ー ス で あ る 。

シ ス テ ム コ ー ル と ラ イ ブ ラ リ の ラ ッ パ ー 関 数

シ ス テ ム コ ー ル は 一 般 に は 直 接 起 動 さ れ ず 、 glibc (や 他 の 何 ら か の ラ イ ブ ラ リ ) 経 由 で 起 動 さ れ る 。 シ ス テ ム コ ー ル の 直 接 起 動 に つ い て は 、 詳 細 は intro (2) を 参 照 の こ と 。 い つ も と い う 訳 で は な い が 、 普 通 は 、 ラ ッ パ ー 関 数 の 名 前 は そ の 関 数 が 起 動 す る シ ス テ ム コ ー ル の 名 前 と 同 じ で あ る 。 例 え ば 、 glibc に は chdir () と い う 関 数 が あ り 、 こ の 関 数 は "chdir" シ ス テ ム コ ー ル を 起 動 す る 。

Often the glibc wrapper function is quite thin, doing little work other than copying arguments to the right registers before invoking the system call, and then setting errno appropriately after the system call has returned. (These are the same steps that are performed by syscall (2), which can be used to invoke system calls for which no wrapper function is provided.) Note: system calls indicate a failure by returning a negative error number to the caller on architectures without a separate error register/flag, as noted in syscall (2); when this happens, the wrapper function negates the returned error number (to make it positive), copies it to errno , and returns -1 to the caller of the wrapper.

し か し な が ら 、 時 に は 、 ラ ッ パ ー 関 数 が シ ス テ ム コ ー ル を 起 動 す る 前 に 何 ら か の 追 加 の 処 理 を 行 う 場 合 が あ る 。 例 え ば 、 現 在 、 二 つ の 関 連 す る シ ス テ ム コ ー ル 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 の 不 安 定 版 の カ ー ネ ル 系 列 と し て 開 発 さ れ た 。 )

*

Starting with kernel 2.6.0, the development model changed, and new system calls may appear in each 2.6.x release. In this case, the exact version number where the system call appeared is shown. This convention continues with the 3.x kernel series, which followed on from kernel 2.6.39; and the 4.x kernel series, which followed on from kernel 3.19; and the 5.x kernel series, which followed on from kernel 4.20.

*

前 の 安 定 版 カ ー ネ ル 系 列 か ら 分 岐 し た 後 に 安 定 版 カ ー ネ ル 系 列 に シ ス テ ム コ ー ル が 追 加 さ れ た 場 合 、 以 前 の 安 定 版 カ ー ネ ル 系 列 に そ の シ ス テ ム コ ー ル が 移 植 (backport) さ れ る こ と が あ る 。 例 え ば 、 2.6.x で 登 場 し た シ ス テ ム コ ー ル の い く つ か は 、 2.4.15 以 降 の 2.4.x リ リ ー ス に も backport さ れ た 。 こ の 場 合 、 シ ス テ ム コ ー ル が 登 場 し た バ ー ジ ョ ン と し て 、 両 方 の 安 定 版 系 列 の バ ー ジ ョ ン が 記 載 さ れ て い る 。

カ ー ネ ル 5.10 で 利 用 可 能 な シ ス テ ム コ ー ル の リ ス ト を 以 下 に 示 す (そ れ 以 前 の カ ー ネ ル で だ け 利 用 可 能 な も の も 少 数 だ が 含 ま れ る ):

Image grohtml-8039-1.png

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 で 削 除 さ れ た 。 こ の シ ス テ ム コ ー ル が ユ ー ザ ー 空 間 か ら 使 え る 状 態 に な っ た こ と は な い 。

System calls on removed ports

Some system calls only ever existed on Linux architectures that have since been removed from the kernel:
AVR32 (port removed in Linux 4.12)

*

pread (2)

*

pwrite (2)

Blackfin (port removed in Linux 4.17)

*

bfin_spinlock (2) (added in Linux 2.6.22)

*

dma_memcpy (2) (added in Linux 2.6.22)

*

pread (2) (added in Linux 2.6.22)

*

pwrite (2) (added in Linux 2.6.22)

*

sram_alloc (2) (added in Linux 2.6.22)

*

sram_free (2) (added in Linux 2.6.22)

Metag (port removed in Linux 4.17)

*

metag_get_tls (2) (add in Linux 3.9)

*

metag_set_fpu_flags (2) (add in Linux 3.9)

*

metag_set_tls (2) (add in Linux 3.9)

*

metag_setglobalbit (2) (add in Linux 3.9)

Tile (port removed in Linux 4.17)

*

cmpxchg_badaddr (2) (added in Linux 2.6.36)

注 意

た い て い は 、 /usr/include/asm/unistd.h で 定 義 さ れ て い る 番 号 __NR_xxx の シ ス テ ム コ ー ル の コ ー ド は 、 Linux カ ー ネ ル ソ ー ス の sys_xxx () と い う ル ー チ ン に 書 か れ て い る 。 し か し こ れ に は 多 く の 例 外 が あ る 。 古 い シ ス テ ム コ ー ル は 新 版 に 置 き 換 え ら れ て き た が 、 こ の 置 き 換 え は あ ま り 体 系 立 て て 行 わ れ て 来 な か っ た か ら で あ る 。 sparc, sparc64, alpha と い っ た プ ロ プ リ エ タ リ な オ ペ レ ー テ ィ ン グ シ ス テ ム の エ ミ ュ レ ー シ ョ ン 機 能 が あ る プ ラ ッ ト フ ォ ー ム で は 、 多 く の 追 加 シ ス テ ム コ ー ル が あ る 。 mips64 に は 、 32 ビ ッ ト シ ス テ ム コ ー ル の フ ル セ ッ ト も 含 ま れ て い る 。

Over time, changes to the interfaces of some system calls have been necessary. One reason for such changes was the need to increase the size of structures or scalar values passed to the system call. Because of these changes, certain architectures (notably, longstanding 32-bit architectures such as i386) now have various groups of related system calls (e.g., truncate (2) and truncate64 (2)) which perform similar tasks, but which vary in details such as the size of their arguments. (As noted earlier, applications are generally unaware of this: the glibc wrapper functions do some work to ensure that the right system call is invoked, and that ABI compatibility is preserved for old binaries.) Examples of systems calls that exist in multiple versions are the following:

*

こ れ ま で に 、 stat (2) に は 3 種 類 の 異 な る バ ー ジ ョ ン が 存 在 す る 。 sys_stat () (ス ロ ッ ト は __NR_oldstat )、 sys_newstat () (ス ロ ッ ト は __NR_stat )、 sys_stat64 () (カ ー ネ ル 2.4 で 導 入 ; ス ロ ッ ト は __NR_stat64 )。 3つ の う ち 最 後 の も の が 最 新 で あ る 。 lstat (2) と fstat (2) に つ い て も 同 様 で あ る 。

*

ま た 、 __NR_oldolduname , __NR_olduname , __NR_uname と い う 定 義 は 、 そ れ ぞ れ sys_olduname (), sys_uname (), sys_newuname () と い う ル ー チ ン を 参 照 し て い る 。

*

Linux 2.0 で は 、 vm86 (2) の 新 バ ー ジ ョ ン が 登 場 し た 。 カ ー ネ ル ル ー チ ン の 古 い バ ー ジ ョ ン 、 新 し い バ ー ジ ョ ン は そ れ ぞ れ sys_vm86old (), sys_vm86 () と い う 名 前 で あ る 。

*

Linux 2.4 で は 、 getrlimit (2) の 新 バ ー ジ ョ ン が 登 場 し た 。 カ ー ネ ル ル ー チ ン の 古 い バ ー ジ ョ ン 、 新 し い バ ー ジ ョ ン は そ れ ぞ れ sys_old_getrlimit () (ス ロ ッ ト は __NR_getrlimit ), sys_getrlimit () (ス ロ ッ ト は __NR_ugetrlimit ) と い う 名 前 で あ る 。

*

Linux 2.4 で 、 ユ ー ザ ー ID と グ ル ー プ ID の サ イ ズ が 16 ビ ッ ト か ら 32 ビ ッ ト に 増 え た 。 こ の 変 更 に 対 応 す る た め 、 い く つ か の シ ス テ ム コ ー ル が 追 加 さ れ た ( chown32 (2), getuid32 (2), getgroups32 (2), setresuid32 (2) な ど )。 こ れ ら の シ ス テ ム コ ー ル が 、 末 尾 の "32" が 付 か な い 同 名 の 古 い バ ー ジ ョ ン に 代 わ っ て 使 わ れ る よ う に な っ た 。

*

Linux 2.4 で は 、 32 ビ ッ ト ア ー キ テ ク チ ャ ー 上 の ア プ リ ケ ー シ ョ ン が 大 き な フ ァ イ ル (つ ま り 、 32 ビ ッ ト で は 表 現 で き な い サ イ ズ や フ ァ イ ル オ フ セ ッ ト が 必 要 な フ ァ イ ル ) に ア ク セ ス で き る よ う に な っ た 。 こ の 変 更 に 対 応 す る た め 、 フ ァ イ ル オ フ セ ッ ト と サ イ ズ を 扱 う シ ス テ ム コ ー ル の 置 き 換 え が 必 要 と な っ た 。 そ の 結 果 、 fcntl64 (2), getdents64 (2), stat64 (2), statfs64 (2), truncate64 (2) と 、 フ ァ イ ル デ ィ ス ク リ プ タ ー や シ ン ボ リ ッ ク リ ン ク で 同 じ 機 能 を 持 つ シ ス テ ム コ ー ル が 追 加 さ れ た 。 こ れ ら の シ ス テ ム コ ー ル が 、 末 尾 の "64" が 付 か な い 同 名 の 古 い バ ー ジ ョ ン に 代 わ っ て 使 わ れ る よ う に な っ た 。 但 し 、 "stat" 系 の シ ス テ ム コ ー ル は そ の 限 り で は な い 。

On newer platforms that only have 64-bit file access and 32-bit UIDs/GIDs (e.g., alpha, ia64, s390x, x86-64), there is just a single version of the UID/GID and file access system calls. On platforms (typically, 32-bit platforms) where the *64 and *32 calls exist, the other versions are obsolete.

*

リ ア ル タ イ ム シ グ ナ ル ( signal (7) 参 照 ) へ の 対 応 を 追 加 す る た め に 、 rt_sig* 系 の シ ス テ ム コ ー ル が カ ー ネ ル 2.2 で 追 加 さ れ た 。 こ れ ら の シ ス テ ム コ ー ル が 、 先 頭 に "rt_" が 付 か な い 同 名 の 古 い バ ー ジ ョ ン に 代 わ っ て 使 わ れ る よ う に な っ た 。

*

The select (2) and mmap (2) system calls use five or more arguments, which caused problems in the way argument passing on the i386 used to be set up. Thus, while other architectures have sys_select () and sys_mmap () corresponding to __NR_select and __NR_mmap , on i386 one finds old_select () and old_mmap () (routines that use a pointer to an argument block) instead. These days passing five arguments is not a problem any more, and there is a __NR__newselect that corresponds directly to sys_select () and similarly __NR_mmap2 . s390x is the only 64-bit architecture that has old_mmap ().

ア ー キ テ ク チ ャ ー 固 有 の 詳 細 : Alpha

*

getxgid (2) returns a pair of GID and effective GID via registers r0 and r20 ; it is provided instead of getgid (2) and getegid (2).

*

getxpid (2) returns a pair of PID and parent PID via registers r0 and r20 ; it is provided instead of getpid (2) and getppid (2).

*

old_adjtimex (2) is a variant of adjtimex (2) that uses struct timeval32 , for compatibility with OSF/1.

*

getxuid (2) returns a pair of GID and effective GID via registers r0 and r20 ; it is provided instead of getuid (2) and geteuid (2).

*

sethae (2) is used for configuring the Host Address Extension register on low-cost Alphas in order to access address space beyond first 27 bits.

関 連 項 目

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

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。