mknod

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

説明
       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).



Linux 1.0                         29 March 1994                         MKNOD(2)