Man page - execveat(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

EXECVEAT

名 前
書 式
説 明
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
バ グ
関 連 項 目
こ の 文 書 に つ い て

名 前

execveat - デ ィ レ ク ト リ フ ァ イ ル デ ィ ス ク リ プ タ ー か ら の 相 対 パ ス で 指 定 さ れ る プ ロ グ ラ ム を 実 行 す る

書 式

#include <unistd.h>

int execveat(int dirfd , const char * pathname ,
char *const
argv [], char *const envp [],
int
flags );

説 明

execveat () シ ス テ ム コ ー ル は dirfd pathname の 組 み 合 わ せ で 参 照 さ れ る プ ロ グ ラ ム を 実 行 す る 。 execve (2) と 全 く 同 様 に 動 作 す る が 、 以 下 で 説 明 す る 点 が 異 な る 。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス の 場 合 、 こ の パ ス 名 は フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd が 参 照 す る デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る ( execve (2) に 相 対 パ ス 名 を 渡 し た 場 合 の よ う に 、 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス で は な い )。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス で 、 dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 ( execve (2) と 同 様 に ) pathname は 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る 。

pathname で 指 定 さ れ た パ ス 名 が 絶 対 パ ス の 場 合 、 dirfd は 無 視 さ れ る 。

pathname が 空 文 字 列 で 、 AT_EMPTY_PATH フ ラ グ が 指 定 さ れ て い る 場 合 、 フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd は 実 行 す る フ ァ イ ル を 指 定 す る (す な わ ち dirfd は デ ィ レ ク ト リ で は な く 実 行 フ ァ イ ル を 参 照 す る )。

flags 引 数 は 、 以 下 に 示 す 値 の 0 個 以 上 を 指 定 で き る ビ ッ ト マ ス ク で あ る 。
AT_EMPTY_PATH

pathname が 空 文 字 列 の 場 合 、 dirfd が 参 照 す る フ ァ イ ル に 対 し て 動 作 を 行 う ( dirfd open (2() O_PATH フ ラ グ を 使 っ て 取 得 で き る )。

AT_SYMLINK_NOFOLLOW

dirfd と NULL で な い pathname で 指 定 さ れ た フ ァ イ ル が シ ン ボ リ ッ ク リ ン ク の 場 合 、 呼 び 出 し は エ ラ ー ELOOP で 失 敗 す る 。

返 り 値

成 功 す る と execveat () は 返 ら な い 。 エ ラ ー の 場 合 は -1 を 返 し 、 errno を 適 切 に 設 定 す る 。

エ ラ ー

execve () で 発 生 す る の と 同 じ エ ラ ー が execveat () で も 起 こ る 。 execveat () で は 以 下 の エ ラ ー も 発 生 す る 。

EBADF

dirfd が 適 切 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EINVAL

flags に 無 効 な フ ラ グ が 指 定 さ れ た 。

ELOOP

flags AT_SYMLINK_NOFOLLOW が 指 定 さ れ て い て 、 dirfd と NULL で な い pathname で 指 定 さ れ た フ ァ イ ル が シ ン ボ リ ッ ク リ ン ク で あ る 。

ENOENT

dirfd pathname で 指 定 さ れ る プ ロ グ ラ ム は イ ン タ ー プ リ タ ー プ ロ グ ラ ム を 使 用 す る 必 要 が あ る が (例 え ば "#!" で 始 ま る ス ク リ プ ト )、 フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd O_CLOEXEC フ ラ グ 付 き で オ ー プ ン さ れ て お り 、 そ の 結 果 プ ロ グ ラ ム フ ァ イ ル は 起 動 さ れ た イ ン タ ー プ リ タ ー に ア ク セ ス で き な い こ と に な る 。 「 バ グ 」 を 参 照 。

ENOTDIR

pathname が 相 対 パ ス で 、 dirfd が デ ィ レ ク ト リ 以 外 の フ ァ イ ル を 参 照 し て い る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。

バ ー ジ ョ ン

execveat () は バ ー ジ ョ ン 3.19 で Linux に 追 加 さ れ た 。 GNU C ラ イ ブ ラ リ に よ る サ ポ ー ト は 検 討 中 で あ る 。

準 拠

execveat () シ ス テ ム コ ー ル は Linux 固 有 で あ る 。

注 意

openat (2) で 説 明 さ れ て い る 理 由 に 加 え 、 execveat () シ ス テ ム コ ー ル は 、 fexecve (3) を /proc フ ァ イ ル シ ス テ ム が マ ウ ン ト さ れ て い な い シ ス テ ム で 実 装 す る た め に も 必 要 で あ る 。

ス ク リ プ ト フ ァ イ ル を 実 行 す る よ う に 要 求 さ れ た 際 、 ス ク リ プ ト イ ン タ ー プ リ タ ー に 渡 さ れ る argv[0] は 、 /dev/fd/N 形 式 ま た は /dev/fd/N/P 形 式 の 文 字 列 で あ る 。 こ こ で N dirfd 引 数 で 渡 さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー 数 で あ る 。 最 初 の 形 式 の 文 字 列 と な る の は 、 AT_EMPTY_PATH が 使 用 さ れ た 場 合 で あ る 。 2 番 目 の 形 式 の 文 字 列 に な る の は 、 ス ク リ プ ト が dirfd pathname の 両 方 を 使 っ て 指 定 さ れ た 場 合 で あ る 。 こ の と き P pathname に 指 定 さ れ た 値 で あ る 。

fexecve (3) で 説 明 さ れ て い る の と 同 じ 理 由 で 、 execveat () を 使 う 際 の 理 に か な っ た 方 法 は dirfd に close-on-exec フ ラ グ を セ ッ ト す る こ と で あ る (た だ し 「 バ グ 」 を 参 照 の こ と )。

バ グ

上 記 で 説 明 し た エ ラ ー ENOENT は 、 以 下 の 形 式 の 呼 び 出 し に 渡 す フ ァ イ ル デ ィ ス ク リ プ タ ー で close-on-exec フ ラ グ を セ ッ ト で き な い こ と を 意 味 し て い る 。

execveat(fd, "", argv, envp, AT_EMPTY_PATH);

し か し な が ら 、 close-on-exec フ ラ グ を セ ッ ト で き な い と い う こ と は 、 ス ク リ プ ト を 参 照 す る フ ァ イ ル デ ィ ス ク リ プ タ ー は ス ク リ プ ト 自 身 に 見 え て し ま う と い う こ と で あ る 。 フ ァ イ ル デ ィ ス ク リ プ タ ー を 無 駄 に 使 う だ け で な く 、 フ ァ イ ル デ ィ ス ク リ プ タ ー が 見 え て し ま う こ と に よ り 、 ス ク リ プ ト が execveat () を 再 帰 的 に 利 用 す る 状 況 で は フ ァ イ ル デ ィ ス ク リ プ タ ー の 枯 渇 に つ な が る 可 能 性 が あ る 。

関 連 項 目

execve (2), openat (2), fexecve (3)

こ の 文 書 に つ い て

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