Rechercher une page de manuel
mknod
Langue: ja
Version: 2004-06-23 (mandriva - 01/05/08)
Section: 2 (Appels système)
名前
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(7) も参照すること)。
- 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() に影響を与える。
関連項目
fcntl(2), mkdir(2), mknodat(2), mount(2), socket(2), stat(2), umask(2), unlink(2), mkfifo(3), path_resolution(7)Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre