Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
mkfifo, mkfifoat - FIFOスペシャルファイル(名前付きパイプ)を作成する
書式
#include <sys/types.h> #include <sys/stat.h> int mkfifo(const char *pathname, mode_t mode); #include <fcntl.h> /* AT_* 定数の定義 */ #include <sys/stat.h> int mkfifoat(int dirfd, const char *pathname, mode_t mode); glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照): mkfifoat(): glibc 2.10 以降: _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L glibc 2.10 より前: _ATFILE_SOURCE
説明
mkfifo() は名前 pathname を持つFIFOスペシャルファイルを作成 する。FIFOの許可モードは mode で指定され、プロセスの umask によって通常の方式で変更を受ける: 作成されたファイルの許可 モードは (mode & ~umask) となる。 FIFOスペシャルファイルはパイプに似ているが、作成のされ方のみが異なって いる。FIFOスペシャ ルファイルは名前のない通信路ではなく、 mkfifo() の呼び出しによりファイルシステムの中に加 えられる。 ひとたびこのようにしてFIFOスペシャルファイルが作成されると、通常のファ イルと同じよう に、どのプロセスからでも読み出し、書き込み用にこれをオー プンすることができる。ただし、こ れに対する全ての入出力操作に先立って その両端がオープンされている必要がある。FIFOを読み出 し用にオープンする と、通常他のプロセスによって同じFIFOが書き込み用にオープンされるまでブ ロックされ、逆の場合も同様である。 FIFOスペシャルファイルをブロックせずに扱う方法について は fifo(7) を参照のこと。 mkfifoat() mkfifoat() システムコールは mkfifo() と全く同様に動作するが、以下で説明する点が異なる。 pathname で指定されたパス名が相対パスの場合、このパス名はファイルディスクリプター dirfd が 参照するディレクトリに対する相対パスと解釈される (mkfifo() に相対パス名を渡した場合のよう に、呼び出したプロセスのカレントワーキングディレクトリに対する相対パスではない)。 pathname で指定されたパス名が相対パスで、 dirfd が特別な値 AT_FDCWD の場合、 (mkfifo() と 同様に) pathname は呼び出したプロセスのカレントワーキングディレクトリに対する相対パスと解 釈される。 pathname で指定されたパス名が絶対パスの場合、 dirfd は無視される。
返り値
成功した場合 mkfifo() と mkfifoat() は 0 を返す。 エラーの場合 -1 を返す (また errno が適 切に設定される)。
エラー
EACCES pathname の中のディレクトリの一つに対し検索(実行)許可がない。 EDQUOT ディスクブロックか inode がそのファイルシステムのユーザークォータに達していた。 EEXIST pathname がすでに存在する。 これには pathname がシンボリックリンクである場合も含ま れる (シンボリックリンクがリンク切れか (dangling) どうかは関係ない)。 ENAMETOOLONG pathname の長さが PATH_MAX を超えているか、個々のファイル 名部分の長さが NAME_MAX を超えている。GNUシステムにおいては、ファ イル名の全体の長さに対しては制限は課せら れていないが、ファイルシステム によっては各部分の長さに制限のある可能性がある。 ENOENT pathname 中のディレクトリ部分が存在しない、 もしくはリンク先の無いシンボリックリン クである。 ENOSPC ディレクトリまたはファイルシステムに新規ファイルを作成する余地がない。 ENOTDIR pathname 中のディレクトリ要素が、実際にはディレクトリでない。 EROFS pathname が読み取り専用のファイルシステムを指している。 mkfifoat() では以下のエラーも発生する。 EBADF dirfd が有効なファイルディスクリプターでない。 ENOTDIR pathname が相対パスで、 dirfd がディレクトリ以外のファイルを参照しているファイル ディスクリプターである。
バージョン
mkfifoat() は glibc 2.4 で追加された。これは、カーネル 2.6.16 以降の Linux で利用できる mknodat(2) を使って実装されている。
属性
マルチスレッディング (pthreads(7) 参照) 関数 mkfifo() と mkfifoat() はスレッドセーフである。
準拠
mkfifo(): POSIX.1-2001, POSIX.1-2008. mkfifoat(): POSIX.1-2008.
関連項目
mkfifo(1), close(2), open(2), read(2), stat(2), umask(2), write(2), fifo(7)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。