FDESC(5)

名称
fdesc - ファイル記述子ファイルシステム

書式
fdesc /dev fdesc rw 0 0

解説
ファイル記述子ファイルシステム、別名 fdesc は、プロセス毎のファイル記述子の名前空間をグローバルなファイルシステムの 名前空間からアクセスする機能を提供します。 通常のマウントポイントは /dev であり、 /dev の既存のエントリを置き換えるのではなく重ね合わせるために、 ファイルシステムを union マウントする必要があります。

マウントポイントの内容は fd, stderr, stdin, stdout および tty です。

fd はディレクトリで、その中身は、番号で表したファイルのリストとして見えます。 これらのファイルは、ディレクトリを読むプロセスが現在オープンしている ファイルに対応しています。 /dev/fd/0 から /dev/fd/# までのファイルは記述子への参照であり、 ファイルシステムを通じてアクセスすることができます。 ファイル記述子がオープンされていて、ファイルをオープンしたときのモードが 既存の記述子のモードのサブセットである場合は、システムコール呼び出し

    fd = open("/dev/fd/0", mode);

と、システムコール呼び出し

    fd = fcntl(0, F_DUPFD, 0);

は等価です。

ファイル /dev/stdin, /dev/stdout および /dev/stderr は /dev/fd サブディレクトリの対応するエントリへのシンボリックリンクとなります。 これらをオープンするのは、以下のシステムコール呼び出しと等価です。

    fd = fcntl(STDIN_FILENO,  F_DUPFD, 0);
    fd = fcntl(STDOUT_FILENO, F_DUPFD, 0);
    fd = fcntl(STDERR_FILENO, F_DUPFD, 0);

open(2) 呼び出し時のフラグは O_RDONLY, O_WRONLY および O_RDWR 以外は無視されます。

/dev/tty エントリはカレントプロセスの制御端末への間接参照です。 これは見かけ上は名前つきパイプ (FIFO) ですが、本物の制御端末デバイスと 全く同じ振舞いをします。

関連ファイル
/dev/fd/#
/dev/stdin
/dev/stdout
/dev/stderr
/dev/tty

関連項目
tty(4), mount_fdesc(8)

歴史
fdesc ファイルシステムは 4.4BSD で最初に登場しました。 fdesc マニュアルページは FreeBSD 2.2 で最初に登場しました。

作者
-nosplit fdesc マニュアルページは Mike Pritchard <mpp@FreeBSD.org> によって書かれたもので、 Jan-Simon Pendry による mount_fdesc(8) マニュアルページに基づいています。