MKNOD(2) | Linux Programmer's Manual | MKNOD(2) |
名前
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 );
glibc 向けの機能検査マクロの要件 ( feature_test_macros(7) 参照):
_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED
説明
システムコール mknod() は pathname という名前のファイルシステム・ノード (ファイル、デバイススペシャルファイル、名前付きパイプ) を、属性 mode と dev の指定にしたがって作成する。返り値
mknod() は成功した場合 0 を、失敗した場合-1 を返す (失敗した場合 errno がエラーの内容にしたがってセットされる)。エラー
- EACCES
- プロセスが親ディレクトリへの書き込み許可を持たない。もしくはパス名 pathname 中のディレクトリ部分のどれかに検索許可属性が無い ( path_resolution(7) も参照すること)。
- EDQUOT
- The user's quota of disk blocks or inodes on the file system has been exhausted.
- EEXIST
- pathname がすでに存在する。これには pathname がシンボリックリンクである場合も含まれる (シンボリックリンクがリンク切れか (dangling) どうかは関係ない)。
- 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() の挙動は規定されていない。」しかしながら、現在ではこの目的のために mknod() を使用すべきではない。この目的のために特別に定義された関数である mkfifo() を使用すべきである。関連項目
chmod(2), chown(2), fcntl(2), mkdir(2), mknodat(2), mount(2), socket(2), stat(2), umask(2), unlink(2), makedev(3), mkfifo(3), path_resolution(7)この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.51 の一部である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2013-01-27 | Linux |