Manpages

名 前

unlink, unlinkat − 名 前 を 削 除 し 、 場 合 に よ っ て は そ れ が 参 照 し て い る フ ァ イ ル も 削 除 す る

書 式

#include <unistd.h>

int unlink(const char *pathname);

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

int unlinkat(int dirfd, const char *pathname, int flags);

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

unlinkat():

glibc 2.10 以 降 :

_XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L

glibc 2.10 よ り 前 :

_ATFILE_SOURCE

説 明

unlink() は フ ァ イ ル シ ス テ ム 上 の 名 前 を 削 除 す る 。 も し そ の 名 前 が フ ァ イ ル へ の 最 後 の リ ン ク (link) で あ り 、 ど の プ ロ セ ス も そ の フ ァ イ ル を オ ー プ ン (open) し て い な け れ ば 、 フ ァ イ ル は 削 除 さ れ る 。 フ ァ イ ル が 使 用 し て い た デ ィ ス ク 上 の 領 域 は 再 利 用 が 可 能 に な る 。 名 前 が フ ァ イ ル へ の 最 後 の リ ン ク で あ っ て も 、 ど こ か の プ ロ セ ス が そ の フ ァ イ ル を 開 い て い る な ら 、 フ ァ イ ル の 最 後 の フ ァ イ ル デ ィ ス ク リ プ タ ー (file descriptor) が 閉 じ ら れ る ま で フ ァ イ ル は 存 在 し 続 け る 。 名 前 が 指 し て い る の が シ ン ボ リ ッ ク リ ン ク な ら 、 そ の リ ン ク を 削 除 す る 。 名 前 が 指 し て い る の が ソ ケ ッ ト 、 FIFO、 デ バ イ ス の 場 合 、 名 前 は 削 除 さ れ る が 、 そ の ソ ケ ッ ト な ど を 開 い て い る プ ロ セ ス は そ の ま ま 使 い 続 け る こ と が で き る 。

unlinkat()
unlinkat
() シ ス テ ム コ ー ル は 、 unlink() と rmdir(2) の い ず れ か と 全 く 同 じ 動 作 を す る (ど ち ら と 同 じ に な る か は flagsAT_REMOVEDIR フ ラ グ が 指 定 さ れ た か に よ り 決 ま る ) が 、 以 下 で 説 明 す る 点 が 異 な る 。

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

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

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

flags は ビ ッ ト マ ス ク で 、 0 も し く は unlinkat() の 動 作 を 制 御 す る フ ラ グ 値 を 論 理 和 の 形 で 指 定 す る こ と が で き る 。 現 在 の と こ ろ 、 定 義 さ れ て い る フ ラ グ は ひ と つ だ け で あ る 。
AT_REMOVEDIR
デ フ ォ ル ト で は 、 unlinkat() は pathname に 対 し て unlink() と 等 価 な 動 作 を す る 。 AT_REMOVEDIR フ ラ グ が 指 定 さ れ た 場 合 、 pathname に 対 し て rmdir(2) と 等 価 な 動 作 を す る 。

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

返 り 値

成 功 し た 場 合 は 0 が 返 さ れ る 。 エ ラ ー の 場 合 は −1 が 返 さ れ 、 errno が 適 切 に 設 定 さ れ る 。

エ ラ ー

EACCES

pathname を 含 ん で い る デ ィ レ ク ト リ の 書 き 込 み 許 可 が プ ロ セ ス の 実 効 (effective) ユ ー ザ ー ID に 与 え ら れ て い な い か 、 pathname の 中 の デ ィ レ ク ト リ の ど れ か に 検 索 許 可 が 与 え ら れ て い な い (path_resolution(7) も 参 照 す る こ と )。

EBUSY

シ ス テ ム か 別 の プ ロ セ ス が そ の フ ァ イ ル を 使 用 中 の た め 、 フ ァ イ ル pathname を unlink で き な い 。 例 え ば 、 そ の フ ァ イ ル が マ ウ ン ト ポ イ ン ト の 場 合 や 、 NFS ク ラ イ ア ン ト ソ フ ト ウ ェ ア が そ の フ ァ イ ル が ア ク テ ィ ブ で あ る が 名 前 な し inode (nameless inode) で あ る こ と を 示 す た め に 作 成 し た 場 合 ("NFS silly renamed") な ど が あ る 。
EFAULT

pathname が ア ク セ ス 可 能 な ア ド レ ス 空 間 の 外 を 指 し て い る 。

EIO

I/O エ ラ ー が 発 生 し た 。

EISDIR

pathname が デ ィ レ ク ト リ を 参 照 し て い る 。 (こ れ は POSIX で 規 定 さ れ て い な い 値 で 、 Linux 2.1.132 以 降 で 返 さ れ る 。 )

ELOOP

pathname を 解 決 す る 際 に 遭 遇 し た シ ン ボ リ ッ ク リ ン ク が 多 過 ぎ る 。

ENAMETOOLONG

pathname が 長 過 ぎ る 。

ENOENT

pathname に 対 応 す る も の が 存 在 し な い か 、 壊 れ た シ ン ボ リ ッ ク リ ン ク で あ る か 、 pathname が 空 で あ る 。

ENOMEM

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

ENOTDIR

pathname の デ ィ レ ク ト リ 部 分 が 、 実 際 に は 、 デ ィ レ ク ト リ で な い 。

EPERM シ ス テ ム が デ ィ レ ク ト リ に 対 す る

unlink 操 作 を 許 可 し て い な い 。 ま

た は デ ィ レ ク ト リ に 対 す る unlink 操 作 の た め に 必 要 な 特 権 を 呼 び 出 し 元 の プ ロ セ ス が 持 っ て い な い 。 (こ れ は POSIX で 規 定 さ れ て い る エ ラ ー の 返 し 方 で あ る 。 上 述 の 通 り 、 こ の 場 合 に は Linux は EISDIR を 返 す 。 )

EPERM (Linux の み ) フ ァ イ ル シ ス テ ム が フ ァ イ ル に 対 す る unlink 操 作 を 許 し て い な い 。
EPERM
ま た は EACCES

pathname を 含 ん で い る デ ィ レ ク ト リ に ス テ ィ ッ キ ー ビ ッ ト (sticky−bit) (S_ISVTX) が 設 定 さ れ て い て 、 プ ロ セ ス の 実 効 ユ ー ザ ー ID が 削 除 し よ う と す る フ ァ イ ル の UID で も そ れ を 含 ん で い る デ ィ レ ク ト リ の も の で も な く 、 か つ プ ロ セ ス に 特 権 が な い (Linux で は CAP_FOWNER ケ ー パ ビ リ テ ィ (capability) が な い )。

EROFS

pathname が 読 み 込 み 専 用 の フ ァ イ ル シ ス テ ム の フ ァ イ ル を 参 照 し て い る 。

unlink() と rmdir(2) で 発 生 す る の と 同 じ エ ラ ー が unlinkat() で も 起 こ る 。 unlinkat() で は 以 下 の エ ラ ー も 発 生 す る 。

EBADF

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

EINVAL

無 効 な フ ラ グ 値 が flags に 指 定 さ れ た 。
EISDIR

pathname が デ ィ レ ク ト リ を 参 照 し て い て 、 flagsAT_REMOVEDIR が さ れ て い な か っ た 。

ENOTDIR

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

バ ー ジ ョ ン

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

準 拠

unlink(): SVr4, 4.3BSD, POSIX.1−2001, POSIX.1−2008.

unlinkat(): POSIX.1−2008.

注 意

glibc で の 注 意
unlinkat
() が 利 用 で き な い 古 い カ ー ネ ル で は 、 glibc ラ ッ パ ー 関 数 は unlink(2)rmdir(2) を 使 用 す る モ ー ド に フ ォ ー ル バ ッ ク す る 。 pathname が 相 対 パ ス の 場 合 、 glibc は dirfd 引 き 数 に 対 応 す る /proc/self/fd の シ ン ボ リ ッ ク リ ン ク に 基 づ い て パ ス 名 を 構 成 す る 。

バ グ

NFS プ ロ ト コ ル に 内 在 す る 問 題 に よ り 、 ま だ 使 用 中 の フ ァ イ ル が 想 定 外 に 消 え て し ま う こ と が あ り え る 。

関 連 項 目

rm(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), mkfifo(3), remove(3), path_resolution(7), symlink(7)

こ の 文 書 に つ い て

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