EN JA
MKFIFO(2)
MKFIFO(2) FreeBSD System Calls Manual MKFIFO(2)

名称

mkfifo, mkfifoatfifo ファイルを作成する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/types.h>
#include < sys/stat.h>

int
mkfifo( const char *path, mode_t mode);

int
mkfifoat( int fd, const char *path, mode_t mode);

解説

mkfifo() システムコールは、 path という名前の新しい fifo ファイルを作成します。アクセス許可は mode によって指定され、呼び出しプロセスの umask(2) の制約を受けます。

fifo の所有者 ID は、プロセスの実効ユーザ ID に設定されます。 fifo のグループ ID は、それが作成される親ディレクトリの ID に設定されます。

mkfifoat() システムコールは、 path が相対パスを指定する場合を除いて、 mkfifo() と同等です。この場合、新たに作成された FIFO は、カレントワーキングディレクトリの代わりにファイル記述子 fd に関連しているディレクトリに相対的に作成されます。 mkfifoat() が、 fd パラメータの特別な値 AT_FDCWD を渡されるなら、カレントワーキングディレクトリが、使用され、振る舞いは、 mkfifo() への呼び出しと同じです。

戻り値

The mkfifo() function returns the value 0 if successful; otherwise the value -1 is returned and the global variable errno is set to indicate the error.

エラー

mkfifo() システムコールは、次の場合に処理を失敗し、fifo は作成されません:
[ ENOTSUP]
カーネルが fifo をサポートするように構成されていません。
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
パスの構成要素が存在しません。
[ EACCES]
パス接頭辞の構成要素は、検索パーミッションを拒否するか、または書き込みパーミッションが作成される fifo の親ディレクトリで拒否されました。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ EROFS]
指定されたファイルは読み込み専用ファイルシステム上にあります。
[ EEXIST]
指定のファイルがすでに存在します。
[ EPERM]
指定されたファイルの親ディレクトリには、不変のフラグが設定されています、詳細については、 chflags(2) マニュアルページを参照してください。
[ ENOSPC]
新しい fifo 用のエントリを配置するディレクトリが拡張できません。ディレクトリが入っているファイルシステムに空き容量が残っていません。
[ ENOSPC]
fifo を作成するファイルシステム上に未使用の inode がありません。
[ EDQUOT]
新しい fifo 用のエントリを配置するディレクトリが拡張できません。ディレクトリが入っているファイルシステム上のディスクブロックのユーザのクォータが枯渇しました。
[ EDQUOT]
fifo を作成中のファイルシステム上のユーザの inode のクォータが枯渇しました。
[ EIO]
ディレクトリエントリの作成中、あるいは inode を割り当て中に I/O (入出力) エラーが発生しました。
[ EIO]
ファイルシステムに読み書きしている間に I/O (入出力) エラーが発生しました。
[ EFAULT]
path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。

mkfifo() によって返されたエラーに加えて mkfifoat() は、次の場合に失敗します:

[ EBADF]
path 引数が、絶対パスを指定していません、そして fd 引数は、 AT_FDCWD でもなく検索のためにオープンされた有効なファイル記述子でもありません。
[ ENOTDIR]
path 引数が、絶対パスではありません、そして fd が、 AT_FDCWD でもなくディレクトリに関連しているファイル記述子でもありません。

規格

mkfifo() システムコールは IEEE Std 1003.1-1990 (“POSIX.1”) に適合しています。 mkfifoat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。

歴史

mkfifoat() システムコールは FreeBSD 8.0 で登場しました。
April 10, 2008 FreeBSD