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

名称

mknod, mknodat特殊なファイルノードを作成する

ライブラリ

Standard C Library (libc, -lc)

書式

#include < sys/stat.h>

int
mknod( const char *path, mode_t mode, dev_t dev);

int
mknodat( int fd, const char *path, mode_t mode, dev_t dev);

解説

ファイルシステムノード path が、 mode で指定されたファイルタイプとアクセス許可で作成されます。アクセス許可は、プロセスの umask 値による修正を受けます。

mode がブロックまたはキャラクタ型特殊ファイルを示す場合、 dev は、システム上の特定のデバイスを示す構成に依存する指示です。そうでない場合 dev は、無視されます。

mknod() システムコールは、スーパユーザ権限が必要です。

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

戻り値

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

エラー

mknod() システムコールは、次の場合に処理に失敗し、ファイルは、作成されません:
[ ENOTDIR]
パスの構成要素中にディレクトリ以外のものが含まれています。
[ ENAMETOOLONG]
パス名の構成要素が 255 文字を越えているか、またはパス名全体が 1023 文字を越えています。
[ ENOENT]
パスの構成要素が存在しません。
[ EACCES]
指定されたパスには、検索が許可されていないディレクトリが含まれています。
[ ELOOP]
パス名を変換するときに検出されたシンボリックリンクが多すぎます。
[ EPERM]
プロセスの実効ユーザ ID がスーパユーザではありません。
[ EIO]
ディレクトリエントリの作成中、あるいは inode を割り当て中に入出力エラーが発生しました。
[ ENOSPC]
新しいノード用のエントリを配置するディレクトリが拡張できません。ディレクトリが入っているファイルシステム上に空き容量が残っていません。
[ ENOSPC]
ノードを作成するファイルシステム上に未使用の inode がありません。
[ EDQUOT]
新しいノードのエントリを配置するディレクトリが拡張できません。ディレクトリが入っているファイルシステム上のディスクブロックのユーザのクォータが枯渇しました。
[ EDQUOT]
ノードを作成中のファイルシステム上の inode のユーザのクォータが枯渇しました。
[ EROFS]
指定されたファイルは、読み込み専用ファイルシステム上にあります。
[ EEXIST]
指定のファイルがすでに存在しています。
[ EFAULT]
path 引数が、プロセスに割り当てられたアドレス空間の範囲外を指しています。
[ EINVAL]
ブロックまたはキャラクタ型特殊ファイル (または whiteout) 以外の作成は行われません。

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

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

規格

mknodat() システムコールは、The Open Group Extended API Set 2 仕様に適合しています。

歴史

mknod() 関数は、 Version 6 AT&T UNIX で登場しました。 mknodat() システムコールは、 FreeBSD 8.0 で登場しました。
January 16, 2011 FreeBSD