FEXECVE(3)

名前
fexecve - ファイルディスクリプタで指定されたプログラムを実行する

書式
#include <unistd.h>

int fexecve(int fd, char *const argv[], char *const envp[]);

glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):

fexecve():
    glibc 2.10 以降:
        _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
    glibc 2.10 より前:
        _GNU_SOURCE

説明
fexecve() は execve(2) と同じ作業を行う。違うのは、 実行するファイルを、パス名ではなく、 ファイルディスクリプタ fd を用いて指定する点である。 ファイルディスクリプタ fd は、読み込み専用でオープンされていなければならず、 呼び出し元はファイルディスクリプタが参照するファイルに対する 実行許可を持っていなければならない。

返り値
fexecve() は呼び出しに成功した場合、戻ることはない。 エラーの場合、返り値として -1 が返され、 errno が適切に設定される。

エラー
エラーは execve(2) と同じだが、以下のエラーが追加になっている:

EINVAL
    fd が有効なファイルディスクリプタでない。または argv が NULL である。または envp が NULL である。

ENOSYS
    /proc ファイルシステムにアクセスできなかった。

バージョン
fexecve() は glibc 2.3.2 以降で実装されている。

準拠
POSIX.1-2008. この関数は POSIX.1-2001 では規定されておらず、 他のシステムで広く利用できるわけではない。

注意
Linux では、 fexecve() は proc(5) ファイルシステムを使って実装されている。 そのため、この関数を呼び出す時点では /proc がマウントされて利用可能となっている必要がある。

関連項目
execve(2)

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