mknod - システムコールの説明 - Linux コマンド集 一覧表
- 名前
- 書式
- 説明
- 返り値
- エラー
- 準拠
- 注意
- 関連項目
名前
mknod - 特殊ファイルや通常のファイルを作成する
書式
#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>
int mknod(const char *pathname, mode_t mode, dev_t dev);
説明
システムコール
mknod
()は
pathname
という名前のファイルシステム・ノード
(ファイル、デバイススペシャルファイル、名前付きパイプ) を、
属性
mode
と
dev
の指定にしたがって作成する。
mode
引き数には、作成するノードの許可属性 (permission) とタイプを指定する。
mode
の指定は以下にあげるファイルタイプのうちの 1 つと、
許可属性の組合せ (ビットごとの OR を使用) で行う。
許可属性は通常通り、プロセスの
umask
によって修正され、作成されたノードの許可属性は
"(mode & ~umask)"
となる。
ファイルタイプには
S_IFREG
,
S_IFCHR
,
S_IFBLK
,
S_IFIFO
,
S_IFSOCK
のいずれかを指定しなければならない。
それぞれ順に、通常のファイル (空のファイルとして作成される)・
キャラクタスペシャルファイル・ブロックスペシャルファイル・
FIFO (名前付きパイプ)・Unix ドメインソケットである
(ファイルタイプ 0 は S_IFREG と同じである)。
ファイルタイプが
S_IFCHR
または
S_IFBLK
のとき、
dev
には作成するデバイススペシャルファイルのメジャー番号と
マイナー番号を指定する。それ以外の場合は
dev
は無視される。
pathname
が既に存在する場合、またはシンボリックリンクの場合、
この呼び出しは EEXIST エラーで失敗する。
新しく作成されたノードの所有者はプロセスの実効ユーザ ID にセットされる。
新たに作られたノードを保持する
親ディレクトリの set-group-ID ビットがセットされていたり、
ファイルシステムが BSD のグループセマンティクスにしたがって
マウントされている場合には、新しいノードのグループ所有権は親ディレクトリの
グループ所有権を継承する (親ディレクトリと同じになる)。
また、そうでなかった場合の所有グループはプロセスの実効グループ ID となる。
返り値
mknod
()は成功した場合 0 を、失敗した場合 -1 を返す
(失敗した場合
errno
がエラーの内容にしたがってセットされる)。
エラー
-
EACCES
-
プロセスが親ディレクトリへの書き込み許可を持たない。
もしくはパス名
pathname
中のディレクトリ部分のどれかに検索許可属性が無い
(
path_resolution
(2)も参照すること)。
-
EEXIST
-
pathname
が既に存在する。
-
EFAULT
-
pathname
がそのプロセスのアクセス可能なアドレス空間の外を指している。
-
EINVAL
-
mode
が通常のファイル・デバイススペシャルファイル・FIFO・ソケット以外を
作成するようにセットされている。
-
ELOOP
-
パス名
pathname
を解決するときに、含まれているシンボリックリンクが多すぎた。
-
ENAMETOOLONG
-
pathname
が長過ぎる。
-
ENOENT
-
pathname
中で指定されているディレクトリが存在しないか、
またはリンク先の無いシンボリックリンクである。
-
ENOMEM
-
十分なカーネルメモリが無い。
-
ENOSPC
-
pathname
のあるデバイスに新たにノードを作成する空きが無い。
-
ENOTDIR
-
pathname
中のディレクトリ要素が、実際にはディレクトリでない。
-
EPERM
-
mode
は通常のファイル・FIFO (名前付きパイプ)・Unix ドメインソケット以外を
作成するようにセットされているが、実行者が特権
(Linux では
CAP_MKNOD
ケーパビリティ (capability)) を持っていない。
または
pathname
を保持するファイルシステムが、指定されたノード形式をサポートしていない。
-
EROFS
-
pathname
が読み出し専用ファイルシステム上のファイルを指している。
準拠
SVr4, 4.4BSD, POSIX.1-2001 (下記も参照).
注意
POSIX.1-2001 では次のように書いている:
「
mknod
()の唯一の移植性のある使用法は、FIFO スペシャルファイルを作成することである。
mode
が S_IFIFO ではない場合、または
dev
が 0 ではない場合、
mknod
()の挙動は規定されていない。」
Linux では、ディレクトリを作成するために
この呼び出しを使用することはできない。
ディレクトリは
mkdir
(2) で、FIFO は
mkfifo
(2)で作成すべきである。
NFS を実現しているプロトコルには多くの不備が存在し、
それらのいくつかは
mknod
()に影響を与える。
関連項目
- Linux Tips 関連記事
- Linux Tips(目次)
- Linux ディストリビューション一覧
- rpm のファイル名にあるi386とかi686とは
- 自分のマシンの情報を調べる
- cron の設定
- ssh の root ログインを禁止する
- ssh を、ユーザ、IPでアクセス制限
- 鍵交換方式によるssh接続
- 鍵交換方式によるssh接続( windowsから )
- 複数ファイル内の文字列を置換して上書き保存する
- あるグループをイニシャルグループとするユーザー一覧出力
- 複数ファイルのファイル名を一括変換する
- 連番ファイルをコマンド一発で作成する
- 中身がランダムなファイルを任意のサイズで作成する
- Linux ユーザーアカウントをロック・アンロックする