Man page - mknod(2)

Packages contains this manual

Available languages:

en fr pl nl ja ru ro de

Manual

MKNOD

名 前
書 式
説 明
mknodat()
返 り 値
エ ラ ー
バ ー ジ ョ ン
準 拠
注 意
関 連 項 目
こ の 文 書 に つ い て

名 前

mknod, mknodat - 特 殊 フ ァ イ ル や 通 常 の フ ァ イ ル を 作 成 す る

書 式

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

#include <fcntl.h> /* AT_* 定 数 の 定 義 */
#include <sys/stat.h>

int mknodat(int dirfd , const char * pathname , mode_t mode , dev_t dev );

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 ( feature_test_macros (7) 参 照 ):

mknod ():

_XOPEN_SOURCE >= 500
|| /* Since glibc 2.19: */ _DEFAULT_SOURCE
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

説 明

シ ス テ ム コ ー ル mknod () は pathname と い う 名 前 の フ ァ イ ル シ ス テ ム ノ ー ド (フ ァ イ ル 、 デ バ イ ス ス ペ シ ャ ル フ ァ イ ル 、 名 前 付 き パ イ プ ) を 、 属 性 mode dev の 指 定 に し た が っ て 作 成 す る 。

The mode argument specifies both the file mode to use and the type of node to be created. It should be a combination (using bitwise OR) of one of the file types listed below and zero or more of the file mode bits listed in inode (7).

The file mode is modified by the process’s umask in the usual way: in the absence of a default ACL, the permissions of the created node are ( mode & ~ umask ).

フ ァ イ ル タ イ プ に は S_IFREG , S_IFCHR , S_IFBLK , S_IFIFO , S_IFSOCK の い ず れ か を 指 定 し な け れ ば な ら な い 。 そ れ ぞ れ 順 に 、 通 常 の フ ァ イ ル (空 の フ ァ イ ル と し て 作 成 さ れ る )・ キ ャ ラ ク タ ー ス ペ シ ャ ル フ ァ イ ル ・ ブ ロ ッ ク ス ペ シ ャ ル フ ァ イ ル ・ FIFO (名 前 付 き パ イ プ )・ UNIX ド メ イ ン ソ ケ ッ ト で あ る (フ ァ イ ル タ イ プ 0 は S_IFREG と 同 じ で あ る )。

フ ァ イ ル タ イ プ が S_IFCHR ま た は S_IFBLK の と き 、 dev に は 作 成 す る デ バ イ ス ス ペ シ ャ ル フ ァ イ ル の メ ジ ャ ー 番 号 と マ イ ナ ー 番 号 を 指 定 す る ( makedev (3) は dev の こ れ ら の 番 号 を 作 成 す る 際 に 役 立 つ だ ろ う )。 そ れ 以 外 の 場 合 は dev は 無 視 さ れ る 。

pathname が 既 に 存 在 す る 場 合 、 ま た は シ ン ボ リ ッ ク リ ン ク の 場 合 、 こ の 呼 び 出 し は EEXIST エ ラ ー で 失 敗 す る 。

新 し く 作 成 さ れ た ノ ー ド の 所 有 者 は プ ロ セ ス の 実 効 ユ ー ザ ー ID に セ ッ ト さ れ る 。 新 た に 作 ら れ た ノ ー ド を 保 持 す る 親 デ ィ レ ク ト リ の set-group-ID ビ ッ ト が セ ッ ト さ れ て い た り 、 フ ァ イ ル シ ス テ ム が BSD の グ ル ー プ セ マ ン テ ィ ク ス に し た が っ て マ ウ ン ト さ れ て い る 場 合 に は 、 新 し い ノ ー ド の グ ル ー プ 所 有 権 は 親 デ ィ レ ク ト リ の グ ル ー プ 所 有 権 を 継 承 す る (親 デ ィ レ ク ト リ と 同 じ に な る )。 ま た 、 そ う で な か っ た 場 合 の 所 有 グ ル ー プ は プ ロ セ ス の 実 効 グ ル ー プ ID と な る 。

mknodat()

mknodat () シ ス テ ム コ ー ル は mknod () と 全 く 同 様 に 動 作 す る が 、 以 下 で 説 明 す る 点 が 異 な る 。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス の 場 合 、 こ の パ ス 名 は フ ァ イ ル デ ィ ス ク リ プ タ ー dirfd が 参 照 す る デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る ( mknod () に 相 対 パ ス 名 を 渡 し た 場 合 の よ う に 、 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス で は な い )。

pathname で 指 定 さ れ た パ ス 名 が 相 対 パ ス で 、 dirfd が 特 別 な 値 AT_FDCWD の 場 合 、 ( mknod () と 同 様 に ) pathname は 呼 び 出 し た プ ロ セ ス の カ レ ン ト ワ ー キ ン グ デ ィ レ ク ト リ に 対 す る 相 対 パ ス と 解 釈 さ れ る 。

pathname で 指 定 さ れ た パ ス 名 が 絶 対 パ ス の 場 合 、 dirfd は 無 視 さ れ る 。

mknodat () の 必 要 性 に つ い て の 説 明 に つ い て は openat (2) を 参 照 。

返 り 値

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

エ ラ ー

EACCES

プ ロ セ ス が 親 デ ィ レ ク ト リ へ の 書 き 込 み 許 可 を 持 た な い 。 も し く は パ ス 名 pathname 中 の デ ィ レ ク ト リ 部 分 の ど れ か に 検 索 許 可 属 性 が 無 い ( path_resolution (7) も 参 照 す る こ と )。

EDQUOT

デ ィ ス ク ブ ロ ッ ク か inode が そ の フ ァ イ ル シ ス テ ム の ユ ー ザ ー ク ォ ー タ に 達 し て い た 。

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 が 読 み 出 し 専 用 フ ァ イ ル シ ス テ ム 上 の フ ァ イ ル を 指 し て い る 。

mknodat () で は 以 下 の エ ラ ー も 発 生 す る 。

EBADF

dirfd が 有 効 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

ENOTDIR

pathname が 相 対 パ ス で 、 dirfd が デ ィ レ ク ト リ 以 外 の フ ァ イ ル を 参 照 し て い る フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。

バ ー ジ ョ ン

mknodat () は カ ー ネ ル 2.6.16 で Linux に 追 加 さ れ た 。 ラ イ ブ ラ リ に よ る サ ポ ー ト は バ ー ジ ョ ン 2.4 で glibc に 追 加 さ れ た 。

準 拠

mknod (): SVr4, 4.4BSD, POSIX.1-2001 (下 記 も 参 照 ), POSIX.1-2008.

mknodat (): POSIX.1-2008.

注 意

POSIX.1-2001 で は 次 の よ う に 書 い て い る : 「 mknod () の 唯 一 の 移 植 性 の あ る 使 用 法 は 、 FIFO ス ペ シ ャ ル フ ァ イ ル を 作 成 す る こ と で あ る 。 mode S_IFIFO で は な い 場 合 、 ま た は dev が 0 で は な い 場 合 、 mknod () の 挙 動 は 規 定 さ れ て い な い 。 」 し か し な が ら 、 現 在 で は こ の 目 的 の た め に mknod () を 使 用 す べ き で は な い 。 こ の 目 的 の た め に 特 別 に 定 義 さ れ た 関 数 で あ る mkfifo () を 使 用 す べ き で あ る 。

Linux で は 、 デ ィ レ ク ト リ を 作 成 す る た め に mknod () を 使 用 す る こ と は で き な い 。 デ ィ レ ク ト リ は mkdir (2) で 作 成 す べ き で あ る 。

NFS を 実 現 し て い る プ ロ ト コ ル に は 多 く の 不 備 が 存 在 し 、 そ れ ら の い く つ か は mknod () と mknodat () に 影 響 を 与 え る 。

関 連 項 目

mknod (1), chmod (2), chown (2), fcntl (2), mkdir (2), mount (2), socket (2), stat (2), umask (2), unlink (2), makedev (3), mkfifo (3), acl (5), path_resolution (7)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man-pages プ ロ ジ ェ ク ト の リ リ ー ス 5.10 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は https://www.kernel.org/doc/man-pages/ に 書 か れ て い る 。