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);

説明
mknod は pathname の名前で mode と dev に従ってファイルシステムのノード(ファイル、デバイススペシャルファイル、 名前付きパイプ)を作成する。 mode は作成するノードのパーミッションとタイプを指定する。 mode には以下にあげるファイルタイプのうちの1つと、許可(permission)の組合せ (ビット単位の OR を使用)で指定する。 許可(permission)は通常通り、プロセスの umask によって修正され、作成されたノードの許可(permission)は (mode & ~umask) となる。 ファイルタイプは S_IFREG 、 S_IFCHR 、 S_IFBLK 、 S_IFIFO のいずれかを指定する。それぞれ 通常ファイル(空ファイルとして作成される)、 キャラクタスペシャルファイル、ブロックスペシャルファイル、FIFO(名前付 きパイプ)であり、0 が指定された場合は通常ファイルが作成される。 ファイルタイプが S_IFCHR または S_IFBLK のとき dev には作成するデバイススペシャルファイルのメジャー番号とマイナー番号を指 定する。それ以外の場合は無視される。 新たに作成されるノードの所有者はプロセスの実効 UID となる。もしノード が含まれているディレクトリに対して set group id ビットがセットされてい る場合、またはファイルシステムが BSD のグループセマンティクスに従って マウントされている場合、新しいノードのグループ所有権はその親ディレクト リグループ所有権を継承する(親ディレクトリと同じになる)。またそうでなかっ た場合はプロセスの実効 GID の所有となる。

返り値
mknod は成功した場合 0 を、失敗した場合 -1 を返す(失敗した場合 errno がエラーの内容にしたがってセットされる)。

エラー

EPERM
    mode が FIFO (名前付きパイプ) 以外の作成にセットされているが実行者がスーパー ユーザーではない。または pathname 中に循環シンボリック・リンクが含まれる。例えば、 自分自身を参照するシンボリック・リンクなど。

EINVAL
    mode が通常ファイル、デバイススペシャルファイル、FIFO 以外にセットされてい る。

EEXIST
    pathname が既に存在する。

EFAULT
    pathname がユーザーのアドレス空間外を指している。

EACCES
    プロセスが親ディレクトリへの書き込み許可を持たない。もしくは pathname 中のディレクトリのどれかに search (execute) パーミッションが無い。

ENAMETOOLONG
    pathname が長過ぎる。

ENOENT
    pathname 中で指定されているディレクトリが存在しないか、またはリンク先の無いシンボ リックリンクである。

ENOTDIR
    pathname 中の要素がディレクトリではない。

ENOMEM
    十分なカーネルメモリが無い。

EROFS
    pathname は読み出し専用ファイルシステム上のファイルを指しているにもかかわらず、 そのファイルに対して書き込みの要求がされている。

ELOOP
    pathname 中に循環シンボリックリンクが含まれる。循環シンボリックリンクとはそのリ ンク先に自分自身が含まれているシンボリックリンクのことである。

ENOSPC
    pathname のあるデバイスに新たにノードを作成する領域が無い。

準拠
SVr4 (但しこの関数の呼び出しには特権が必要となる。これは POSIX には規 定されていない), 4.4BSD。Linux の実装は SVr4 の実装と異なり、パイプの 作成には root の特権が必要ではなく、また EMULTIHOP と ENOLINK と EINTR のエラーについては記述されていない。

バグ
mknod はディレクトリやソケットファイルの作成には使用できない。また、通常のファ イルの作成でもスーパーユーザー以外が使用することはできない。 NFS に基づくプロトコルには多くの不適切な物が存在し、 mknod に影響を与える。

関連項目
read(2), write(2), fcntl(2), close(2), unlink(2), open(2), mkdir(2), stat(2), umask(2), mount(2), socket(2), fopen(3).