Manpages

名 前

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():

_BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

説 明

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

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 に は 作 成 す る デ バ イ ス ス ペ シ ャ ル フ ァ イ ル の メ ジ ャ ー 番 号 と マ イ ナ ー 番 号 を 指 定 す る (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 ス ペ シ ャ ル フ ァ イ ル を 作 成 す る こ と で あ る 。 modeS_IFIFO で は な い 場 合 、 ま た は dev が 0 で は な い 場 合 、 mknod() の 挙 動 は 規 定 さ れ て い な い 。 」 し か し な が ら 、 現 在 で は こ の 目 的 の た め に mknod() を 使 用 す べ き で は な い 。 こ の 目 的 の た め に 特 別 に 定 義 さ れ た 関 数 で あ る mkfifo() を 使 用 す べ き で あ る 。

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

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

関 連 項 目

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.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。