Man page - flock(2)

Packages contains this manual

Available languages:

en fr pl ja ru ro de

Manual

FLOCK

名 前
書 式
説 明
返 り 値
エ ラ ー
準 拠
注 意
NFS で ぎ 芳 細
関 連 項 目
こ の 文 書 に つ い て

名 前

flock - オ ー プ ン さ れ た フ ァ イ ル に 対 す る ア ド バ イ ザ リ ロ ッ ク の 適 用 、 解 除 を 行 う

書 式

#include <sys/file.h>

int flock(int fd , int operation );

説 明

オ ー プ ン さ れ た フ ァ イ ル に ア ド バ イ ザ リ ロ ッ ク (advisory lock) の 適 用 や 解 除 を 行 う 。 フ ァ イ ル は fd で 指 定 す る 。 引 数 operation に は 以 下 の い ず れ か 一 つ を 指 定 す る :

LOCK_SH

共 有 ロ ッ ク を 適 用 す る 。 指 定 し た フ ァ イ ル に 対 し て 、 一 つ 以 上 の プ ロ セ ス が 同 時 に 共 有 ロ ッ ク を 保 持 す る こ と が で き る 。

LOCK_EX

排 他 ロ ッ ク を 適 用 す る 。 指 定 し た フ ァ イ ル に 対 し て 、 た だ 一 つ の プ ロ セ ス だ け が 同 時 に 排 他 ロ ッ ク を 保 持 す る こ と が で き る 。

LOCK_UN

こ の プ ロ セ ス が 保 持 し て い る 既 存 の ロ ッ ク を 解 除 す る 。

flock () を 呼 び 出 し た と き に 、 指 定 し た ロ ッ ク 種 別 と 異 な る ロ ッ ク が 別 プ ロ セ ス に よ っ て 保 持 さ れ て い る と 、 flock () は 停 止 (block) さ れ る こ と が あ る 。 非 停 止 (nonblocking) タ イ プ の 要 求 を 行 う た め に は 、 上 記 の 操 作 (operation) に LOCK_NB を 論 理 和 の 形 で 指 定 す る 。

一 つ の フ ァ イ ル に 共 有 ロ ッ ク と 排 他 ロ ッ ク を 同 時 に 設 定 す る こ と は で き な い 。

flock () に よ っ て 作 ら れ る ロ ッ ク は 、 オ ー プ ン フ ァ イ ル 記 述 (open file description) ( open (2) 参 照 ) と 関 連 付 け ら れ る 。 し た が っ て 、 フ ァ イ ル デ ィ ス ク リ プ タ ー の 複 製 ( fork (2) や dup (2) な ど に よ り 作 成 さ れ る ) は 同 じ ロ ッ ク を 参 照 し 、 こ れ ら の フ ァ イ ル デ ィ ス ク リ プ タ ー の ど れ を 使 っ て も こ の ロ ッ ク を 変 更 し た り 解 放 し た り で き る 。 ま た 、 ロ ッ ク の 解 放 は 、 上 記 の 複 数 の フ ァ イ ル デ ィ ス ク リ プ タ ー の い ず れ か に 対 し て 明 示 的 に LOCK_UN 操 作 を 指 示 し た 場 合 か 、 こ れ ら の フ ァ イ ル デ ィ ス ク リ プ タ ー が す べ て 閉 じ ら れ た 場 合 に 行 わ れ る 。

あ る プ ロ セ ス が open (2) (も し く は 同 様 の 方 法 ) を 使 っ て 同 じ フ ァ イ ル に 対 し て 複 数 の フ ァ イ ル デ ィ ス ク リ プ タ ー を 取 得 し た 場 合 、 flock () は こ れ ら 複 数 の フ ァ イ ル デ ィ ス ク リ プ タ ー を 各 々 独 立 の も の と し て 扱 う 。 こ れ ら の フ ァ イ ル デ ィ ス ク リ プ タ ー の 一 つ を 使 っ て フ ァ イ ル を ロ ッ ク し よ う と し た 際 、 そ の ロ ッ ク 要 求 は 、 呼 び 出 し 元 の プ ロ セ ス が そ の フ ァ イ ル の 別 の フ ァ イ ル デ ィ ス ク リ プ タ ー 経 由 で す で に 設 定 し て い る ロ ッ ク に よ っ て 拒 否 さ れ る 場 合 が あ る 。

一 つ の プ ロ セ ス は 、 一 つ の フ ァ イ ル に 対 し て (共 有 ロ ッ ク と 排 他 ロ ッ ク の う ち ) い ず れ か 一 種 類 の ロ ッ ク し か 設 定 で き な い 。 既 に ロ ッ ク さ れ た フ ァ イ ル に 対 し て flock () を 呼 び 出 す と 、 既 存 の ロ ッ ク を 新 し い ロ ッ ク モ ー ド に 変 更 す る こ と に な る 。

flock () に よ り 作 成 さ れ た ロ ッ ク は execve (2) の 前 後 で 保 存 さ れ る 。

共 有 ロ ッ ク も 排 他 ロ ッ ク も 、 フ ァ イ ル が ど の モ ー ド で オ ー プ ン さ れ た か に 関 係 な く 適 用 す る こ と が で き る 。

返 り 値

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

エ ラ ー

EBADF

fd が オ ー プ ン さ れ た フ ァ イ ル デ ィ ス ク リ プ タ ー で は な い 。

EINTR

ロ ッ ク の 獲 得 を 待 っ て い る 間 に 、 ハ ン ド ラ ー に よ り 捕 捉 さ れ た シ グ ナ ル を 受 信 し 、 flock () が 中 断 さ れ た 。 signal (7) 参 照 。

EINVAL

oepration が 無 効 で あ る 。

ENOLCK

ロ ッ ク レ コ ー ド を 割 り 当 て る た め の メ モ リ ー が 不 足 し て い る 。

EWOULDBLOCK

指 定 し た フ ァ イ ル が ロ ッ ク さ れ て お り 、 LOCK_NB フ ラ グ が 指 定 さ れ て い る 。

準 拠

4.4BSD ( flock () コ ー ル は 4.2BSD で 最 初 に 登 場 し た )。 fcntl (2) で 実 装 さ れ て い る も の な ど を 含 め る と 、 flock () の 機 能 は ほ と ん ど の UNIX シ ス テ ム で 実 装 さ れ て い る 。

注 意

kernel 2.0 以 降 で は 、 flock () は 、 GNU C ラ イ ブ ラ リ で の fcntl (2) を 呼 び 出 し て の エ ミ ュ レ ー シ ョ ン で は な く 、 そ れ 自 体 が シ ス テ ム コ ー ル と し て 実 装 さ れ て い る 。 こ の 実 装 で は 、 flock () と fcntl (2) で 適 用 さ れ る ロ ッ ク の 種 別 に は 相 互 作 用 が な く な り 、 flock () が デ ッ ド ロ ッ ク を 検 出 し な く な る 。 (た だ し 、 最 近 の BSD な ど い く つ か の シ ス テ ム で は 、 flock () と fcntl (2) ロ ッ ク が 互 い に 影 響 す る こ と が 「 あ る 」 と い う 点 に 注 意 す る こ と 。 )

flock () ア ド バ イ ザ リ ロ ッ ク だ け を 適 用 す る 。 し た が っ て 、 フ ァ イ ル に 適 切 な ア ク セ ス 権 を 付 与 し て い れ ば 、 プ ロ セ ス は flock () の 使 用 に 無 視 し て 、 フ ァ イ ル へ の 入 出 力 を 行 う こ と が で き る 。

flock () と fcntl (2) は fork さ れ た プ ロ セ ス と dup (2) で 違 っ た 動 作 を す る 。 flock () を fcntl (2) を 使 っ て 実 装 し て い る シ ス テ ム で は 、 flock () の 動 作 は こ の マ ニ ュ ア ル ペ ー ジ に 記 載 さ れ て い る も の と は 違 う だ ろ う 。

ロ ッ ク の 変 換 (共 有 ロ ッ ク か ら 排 他 ロ ッ ク へ 、 も し く は そ の 反 対 ) が ア ト ミ ッ ク に 行 わ れ る こ と は 保 証 さ れ て い な い : 既 存 の ロ ッ ク が ま ず 削 除 さ れ 、 そ れ か ら 新 し い ロ ッ ク が 設 定 さ れ る 。 こ の 2つ の ス テ ッ プ の 間 に 、 他 の プ ロ セ ス か ら の 処 理 待 ち の ロ ッ ク 要 求 が 認 め ら れ る か も し れ ず 、 結 果 と し て 変 換 は 停 止 (block) し た り 、 ( LOCK_NB が 指 定 さ れ た 場 合 に は ) 失 敗 し た り す る 。 (こ れ は 元 々 の BSD の 動 作 で あ り 、 多 く の 他 の 実 装 で も 起 こ る 。 )

NFS で ぎ 芳 細

In Linux kernels up to 2.6.11, flock () does not lock files over NFS (i.e., the scope of locks was limited to the local system). Instead, one could use fcntl (2) byte-range locking, which does work over NFS, given a sufficiently recent version of Linux and a server which supports locking.

Since Linux 2.6.12, NFS clients support flock () locks by emulating them as fcntl (2) byte-range locks on the entire file. This means that fcntl (2) and flock () locks do interact with one another over NFS. It also means that in order to place an exclusive lock, the file must be opened for writing.

Since Linux 2.6.37, the kernel supports a compatibility mode that allows flock () locks (and also fcntl (2) byte region locks) to be treated as local; see the discussion of the local_lock option in nfs (5).

関 連 項 目

flock (1), close (2), dup (2), execve (2), fcntl (2), fork (2), open (2), lockf (3), lslocks (8)

Linux カ ー ネ ル ソ ー ス 内 の Documentation/filesystems/locks.txt (以 前 の カ ー ネ ル で は Documentation/locks.txt )

こ の 文 書 に つ い て

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