名 前
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) の い ず れ か
と 全 く 同 じ 動
作 を す る (ど ち
ら と 同 じ に な
る か は flags に
AT_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) も 参 照 す る こ と )。
シ ス テ
ム か 別 の プ ロ
セ ス が そ の フ
ァ イ ル を 使 用
中 の た め 、 フ
ァ イ ル pathname を unlink
で き な い 。 例
え ば 、 そ の フ
ァ イ ル が マ ウ
ン ト ポ イ ン ト
の 場 合 や 、 NFS ク
ラ イ ア ン ト ソ
フ ト ウ ェ ア が
そ の フ ァ イ ル
が ア ク テ ィ ブ
で あ る が 名 前
な し inode (nameless inode) で あ
る こ と を 示 す
た め に 作 成 し
た 場 合 ("NFS silly renamed")
な ど が あ る 。
pathname が ア ク セ ス 可 能 な ア ド レ ス 空 間 の 外 を 指 し て い る 。 EIO I/O エ ラ ー が 発 生 し た 。 EISDIR pathname が デ ィ レ ク ト リ を 参 照 し て い る 。 (こ れ は POSIX で 規 定 さ れ て い な い 値 で 、 Linux 2.1.132 以 降 で 返 さ れ る 。 ) ELOOP pathname を 解 決 す る 際 に 遭 遇 し た シ ン ボ リ ッ ク リ ン ク が 多 過 ぎ る 。 ENAMETOOLONG pathname が 長 過 ぎ る 。
十 分 な カ ー ネ ル メ モ リ ー が な い 。
pathname の デ ィ レ ク ト リ 部 分 が 、 実 際 に は 、 デ ィ レ ク ト リ で な い 。
た は デ ィ レ ク ト リ に 対 す る unlink 操 作 の た め に 必 要 な 特 権 を 呼 び 出 し 元 の プ ロ セ ス が 持 っ て い な い 。 (こ れ は POSIX で 規 定 さ れ て い る エ ラ ー の 返 し 方 で あ る 。 上 述 の 通 り 、 こ の 場 合 に は Linux は EISDIR を 返 す 。 ) EPERM (Linux の
み ) フ ァ イ ル シ
ス テ ム が フ ァ
イ ル に 対 す る unlink
操 作 を 許 し て
い な い 。 pathname を 含 ん で い る デ ィ レ ク ト リ に ス テ ィ ッ キ ー ビ ッ ト (sticky−bit) (S_ISVTX) が 設 定 さ れ て い て 、 プ ロ セ ス の 実 効 ユ ー ザ ー ID が 削 除 し よ う と す る フ ァ イ ル の UID で も そ れ を 含 ん で い る デ ィ レ ク ト リ の も の で も な く 、 か つ プ ロ セ ス に 特 権 が な い (Linux で は CAP_FOWNER ケ ー パ ビ リ テ ィ (capability) が な い )。
unlink() と rmdir(2) で 発 生 す る の と 同 じ エ ラ ー が unlinkat() で も 起 こ る 。 unlinkat() で は 以 下 の エ ラ ー も 発 生 す る 。
|