Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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 以降:
                _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) を使って実装されている。

属性

       この節で使用されている用語の説明については、 attributes(7) を参照。

       ┌─────────────────────┬───────────────┬─────────┐
       │インターフェース属性      │
       ├─────────────────────┼───────────────┼─────────┤
       │ mkfifo(),           │ Thread safety │ MT-Safe │
       │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 プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。