Manpages

名 前

syscalls − Linux の シ ス テ ム コ ー ル

書 式

Linux の シ ス テ ム コ ー ル 。

説 明

シ ス テ ム コ ー ル は 、 ア プ リ ケ ー シ ョ ン と Linux カ ー ネ ル と の 間 の 基 本 的 な イ ン タ ー フ ェ ー ス で あ る 。 シ ス テ ム コ ー ル と ラ イ ブ ラ リ の ラ ッ パ ー 関 数 シ ス テ ム コ ー ル は 一 般 に は 直 接 起 動 さ れ ず 、 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.15 で 利 用 可 能 な シ ス テ ム コ ー ル の リ ス ト を 以 下 に 示 す (そ れ 以 前 の カ ー ネ ル で だ け 利 用 可 能 な も の も 少 数 だ が 含 ま れ る ):

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

注 意

た い て い は 、 /usr/include/asm/unistd.h で 定 義 さ れ て い る 番 号 __NR_xxx の シ ス テ ム コ ー ル の コ ー ド は 、 Linux カ ー ネ ル ソ ー ス の sys_xxx() と い う ル ー チ ン に 書 か れ て い る (i386 に お け る 実 行 テ ー ブ ル は /usr/src/linux/arch/i386/kernel/entry.S に 書 か れ て い る )。 し か し こ れ に は 多 く の 例 外 が あ る 。 古 い シ ス テ ム コ ー ル は 新 版 に 置 き 換 え ら れ て き た が 、 こ の 置 き 換 え は あ ま り 体 系 立 て て 行 わ れ て 来 な か っ た か ら で あ る 。 parisc, sparc, sparc64, alpha と い っ た プ ロ プ リ エ タ リ な オ ペ レ ー テ ィ ン グ シ ス テ ム の エ ミ ュ レ ー シ ョ ン 機 能 が あ る プ ラ ッ ト フ ォ ー ム で は 、 多 く の 追 加 シ ス テ ム コ ー ル が あ る 。 mips64 に は 、 32 ビ ッ ト シ ス テ ム コ ー ル の フ ル セ ッ ト も 含 ま れ て い る 。 時 間 の 経 過 と と も に 、 い く つ か の シ ス テ ム コ ー ル で は イ ン タ ー フ ェ ー ス の 変 更 が 必 要 に な っ て き た 。 こ う し た 変 更 の 理 由 の 一 つ は 、 シ ス テ ム コ ー ル に 渡 さ れ る 構 造 体 や ス カ ラ ー 値 の サ イ ズ を 増 や す 必 要 が あ る こ と だ っ た 。 こ れ ら の 変 更 の 結 果 、 現 在 で は 、 同 様 の 処 理 を 実 行 す る が 引 き 数 の サ イ ズ な ど の 詳 細 は 異 な る 、 一 連 の シ ス テ ム コ ー ル 群 が い く つ か 存 在 す る (例 え ば 、 truncate(2)truncate64(2))。 (す で に 述 べ た よ う に 、 一 般 に は ア プ リ ケ ー シ ョ ン が こ の こ と を 意 識 す る こ と は な い 。 glibc の ラ ッ パ ー 関 数 が 、 適 切 な シ ス テ ム コ ー ル を 起 動 し 、 古 い バ イ ナ リ に 対 し て ABI レ ベ ル で の 互 換 性 を 保 持 す る こ と を 保 証 す る 処 理 を 行 っ て い る 。 ) 複 数 の バ ー ジ ョ ン が 存 在 す る シ ス テ ム コ ー ル の 例 を 以 下 に 挙 げ る 。

* こ れ ま で に 、

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), ftruncate64(2), getdents64(2), stat64(2), statfs64(2) と 、 フ ァ イ ル デ ィ ス ク リ プ タ ー や シ ン ボ リ ッ ク リ ン ク で 同 じ 機 能 を 持 つ シ ス テ ム コ ー ル が 追 加 さ れ た 。 こ れ ら の シ ス テ ム コ ー ル が 、 末 尾 の "64" が 付 か な い 同 名 の 古 い バ ー ジ ョ ン に 代 わ っ て 使 わ れ る よ う に な っ た 。 但 し 、 "stat" 系 の シ ス テ ム コ ー ル は そ の 限 り で は な い 。

64−bit フ ァ イ ル ア ク セ ス と 32−bit UID の み を 持 つ 新 し い プ ラ ッ ト フ ォ ー ム (alpha, ia64, s390x な ど ) で は 、 *64 や *32 と い う 名 前 の シ ス テ ム コ ー ル は な い 。 *64 や *32 と い う シ ス テ ム コ ー ル が 存 在 す る 場 合 、 *64 や *32 が つ い て い な い シ ス テ ム コ ー ル は 廃 止 扱 い で あ る 。

* リ ア ル タ イ ム シ グ ナ ル

(signal(7) 参 照 ) へ の 対 応 を 追 加 す る た め に 、

rt_sig* 系 の シ ス テ ム コ ー ル が カ ー ネ ル 2.2 で 追 加 さ れ た 。 こ れ ら の シ ス テ ム コ ー ル が 、 先 頭 に "rt_" が 付 か な い 同 名 の 古 い バ ー ジ ョ ン に 代 わ っ て 使 わ れ る よ う に な っ た 。

*

select(2)mmap(2) は 5つ も し く は そ れ 以 上 の 引 き 数 を 使 用 し て お り 、 i386 で は 引 き 数 の 受 け 渡 し に 問 題 が 生 じ る 。 そ の た め 、 他 の ア ー キ テ ク チ ャ ー で は __NR_select__NR_mmap に 対 応 す る sys_select() と sys_mmap() が 存 在 す る が 、 i386 で は 代 わ り に old_select() と old_mmap() と い う ル ー チ ン が あ る (こ れ ら の ル ー チ ン は 引 き 数 ブ ロ ッ ク へ の ポ イ ン タ ー を 使 用 す る )。 現 在 で は 5つ の 引 き 数 を 渡 す こ と は も は や 問 題 で は な く な っ て お り 、 __NR__newselectsys_select() に 直 接 対 応 す る よ う に な っ て い る 。 __NR_mmap2 に つ い て も 同 様 で あ る 。

関 連 項 目

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

こ の 文 書 に つ い て

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