Manpages

名 前

lockf − オ ー プ ン さ れ た フ ァ イ ル に 対 す る POSIX ロ ッ ク の 適 用 ・ テ ス ト ・ 解 除 を 行 う

書 式

#include <unistd.h>

int lockf(int fd, int cmd, off_t len);

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

lockf():

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

説 明

オ ー プ ン さ れ た フ ァ イ ル の セ ク シ ョ ン に 対 し て 、 POSIX ロ ッ ク の 適 用 ・ テ ス ト ・ 解 除 を す る 。 フ ァ イ ル は fd で 指 定 さ れ る 。 fd は 書 き 込 み の た め に オ ー プ ン し た フ ァ イ ル デ ィ ス ク リ プ タ ー で あ る 。 ア ク シ ョ ン は cmd で 指 定 さ れ る 。 pos を 現 在 の フ ァ イ ル 位 置 と す る と 、 len が 正 の 場 合 、 セ ク シ ョ ン は バ イ ト 位 置 pos..pos+len−1 と な り 、 len が 負 の 場 合 、 セ ク シ ョ ン は バ イ ト 位 置 poslen..pos−1 と な る 。 len が 0 の 場 合 、 セ ク シ ョ ン は 現 在 の フ ァ イ ル 位 置 か ら 無 限 大 ま で と な る (つ ま り 現 在 の 、 あ る い は 変 更 さ れ た 場 合 は 将 来 の 、 フ ァ イ ル 終 端 位 置 ま で )。 ど の 場 合 に お い て も 、 セ ク シ ョ ン は 以 前 の フ ァ イ ル 終 端 よ り も 拡 大 さ れ う る 。

Linux で は 、 lockf() は 単 に fcntl(2) の ロ ッ ク へ の イ ン タ ー フ ェ ー ス で あ る 。 多 く の 他 の シ ス テ ム で lockf() は こ の よ う に 実 装 さ れ て い る が 、 POSIX.1−2001 で は lockf() と fcntl(2) の ロ ッ ク と の 関 係 は 規 定 さ れ て い な い 。 お そ ら く 、 移 植 性 が 必 要 な ア プ リ ケ ー シ ョ ン で は 、 lockf() と fcntl(2) の ロ ッ ク を 混 ぜ て 呼 び 出 す の は 避 け る べ き で あ ろ う 。 有 効 な オ プ シ ョ ン を 以 下 に 挙 げ る 。

F_LOCK フ ァ イ ル の 指 定 さ れ た セ ク シ ョ ン に 排 他 ロ ッ ク を 設 定 す る 。 そ の セ ク シ ョ ン

(の 一 部 ) が 既 に ロ ッ ク さ れ て い た 場 合 、 前 の ロ ッ ク が 解 除 さ れ る ま で 関 数 の 呼 び 出 し が ブ ロ ッ ク さ れ る 。 こ の セ ク シ ョ ン が 前 に ロ ッ ク さ れ て い る セ ク シ ョ ン と 重 な っ た 場 合 、 2 つ の セ ク シ ョ ン は 結 合 さ れ る 。 ロ ッ ク を 保 持 し て い る プ ロ セ ス が 、 そ の フ ァ イ ル の フ ァ イ ル デ ィ ス ク リ プ タ ー を ク ロ ー ズ す る と 、 フ ァ イ ル ロ ッ ク は 解 放 さ れ る 。 子 プ ロ セ ス は ロ ッ ク を 継 承 し な い 。
F_TLOCK

F_LOCK と 同 様 で あ る が 、 フ ァ イ ル が 既 に ロ ッ ク さ れ て い る 場 合 、 関 数 の 呼 び 出 し は ブ ロ ッ ク を 行 わ ず に エ ラ ー を 返 す 。

F_ULOCK フ ァ イ ル の 指 定 さ れ た セ ク シ ョ ン の ロ ッ ク を 解 除 す る 。 こ れ に よ り ロ ッ ク さ れ た セ ク シ ョ ン が 2 つ に 分 割 さ れ る か も し れ な い 。

F_TEST 次 の よ う に ロ ッ ク の テ ス ト を す る 。 指 定 さ れ た セ ク シ ョ ン が ロ ッ ク さ れ て い な い か 、 こ の プ ロ セ ス に よ り ロ ッ ク さ れ て い る 場 合 、

0 を 返 す 。 他 の プ ロ セ ス が ロ ッ ク を 保 持 し て い る 場 合 、 −1 を 返 し 、 errnoEAGAIN (い く つ か の 他 の シ ス テ ム で は EACCES) に 設 定 す る 。

返 り 値

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

エ ラ ー

EACCESEAGAIN ロ ッ ク さ れ た フ ァ イ ル に 対 し て 、 F_TLOCK ま た は F_TEST が 指 定 さ れ て い る 。 ま た は 、 フ ァ イ ル が 他 の プ ロ セ ス に よ り メ モ リ ー マ ッ プ さ れ て お り 、 指 定 さ れ た 操 作 が 禁 止 さ れ て い る 。

EBADF

fd が オ ー プ ン さ れ た フ ァ イ ル の デ ィ ス ク リ プ タ ー で は な い 。 ま た は 、 cmdF_LOCKF_TLOCK で 、 fd が 書 き 込 み 可 能 な フ ァ イ ル デ ィ ス ク リ プ タ ー で な い 。

EDEADLK コ マ ン ド が F_LOCK で あ り 、 こ の ロ ッ ク 操 作 を 行 う と デ ッ ド ロ ッ ク が 発 生 し て し ま う 。

EINVAL

cmd に 無 効 な 操 作 が 指 定 さ れ た 。

ENOLCK

非 常 に 多 く の セ グ メ ン ト ロ ッ ク が 開 か れ 、 ロ ッ ク テ ー ブ ル が 一 杯 で あ る 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

lockf() 関 数 は ス レ ッ ド セ ー フ で あ る 。

準 拠

SVr4, POSIX.1−2001.

関 連 項 目

fcntl(2), flock(2)

Linux カ ー ネ ル ソ ー ス の Documentation/filesystems デ ィ レ ク ト リ に あ る locks.txtmandatory−locking.txt (以 前 の カ ー ネ ル で は 、 こ れ ら の フ ァ イ ル は Documentation デ ィ レ ク ト リ 直 下 に あ り 、 mandatory−locking.txtmandatory.txt と い う 名 前 で あ っ た 。 )

こ の 文 書 に つ い て

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