FLOCK
Section: System Calls (2)
索引
jman
BSD mandoc
索引
名称
flock
- 開いたファイル上の問合せ型ロックを適用または除去する
索引
ライブラリ
Lb libc
索引
書式
In sys/file.h
Fd #define LOCK_SH 0x01 /* 共有ファイルロック */
Fd #define LOCK_EX0x02/* 排他的ファイルロック */
Fd #defineLOCK_NB0x04/* ロックするときにブロックしない */
Fd #defineLOCK_UN0x08/* ファイルをアンロックする */
Ft int
Fn flock int fd int operation
索引
解説
Fn flock
システムコールは、ファイル記述子
Fa fd
に対応するファイル上の
問合せ型
ロックを適用または除去します。
ロックを適用するには、
Fa operation
引数に
LOCK_SH
または
LOCK_EX
のいずれかと、必要であれば
LOCK_NB
を加えて指定します。
既存のロックをアンロックする場合は
operation
を
LOCK_UN
にしてください。
問合せ型ロックは、協同するプロセス間での一貫したファイル操作を
可能にしますが、ファイルの一貫性を保証する
ものではありません (すなわち、プロセスは問合せ型ロックを使用せずに
ファイルにアクセスできるので、その結果一貫性がなくなる可能性があります)。
ロックメカニズムは
共有
ロックと
排他的
ロックという 2 つのタイプのロックを提供します。
いつでも複数の共有ロックを 1 つのファイルに適用できます。
しかし、同時に 1 つのファイルに複数の排他的ロック、
または共有ロックと排他的ロックの両方を適用することはできません。
適切なロックのタイプを指定するだけで、共有ロックは排他的ロックに
アップグレード
でき、排他的ロックを共有ロックに
ダウングレード
できます。
その結果として前のロックは解放されて
新しいロックが適用されます (他のプロセスがロックを取得し
解放した後かもしれません)。
既にロックされているオブジェクトについてロックを要求すると、
ロックが獲得できるまで呼び出し側はブロックされます。
ただし
LOCK_NB
が
Fa operation
に含まれる場合はブロックされません。
代わりに呼び出しが失敗し、エラー
Er EWOULDBLOCK
が返されます。
索引
注
ロックはファイルにかけられるものであって、
ファイル記述子にかけられるものではありません。
すなわち、
dup(2)
または
fork(2)
によって複製されたファイル記述子は、
ロックの複数のインスタンスとはならずに、1 つのロックへの複数の
参照になります。
あるファイルについてのロックを保持しているプロセスがフォークし、
子プロセスが明示的にそのファイルをアンロックする場合、
親プロセスはそのロックを失います。
Fn flock ,
fcntl(2)
および
lockf(3)
のロックは互換性があります。
異なったロックのインタフェースを使用するプロセスは、
同じファイルを安全に使用することができます。
しかしながら、同じプロセスの内部では
これらのインタフェースのうちの 1 つのみが使用されるべきです。
Fn flock
を介してあるプロセスによってあるファイルがロックされている場合、
fcntl(2)
または
lockf(3)
を使用している他のプロセスの視点からは、
そのファイルの中のあらゆるレコードはロックされているかのように見えます。
また、その逆も同様です。
ロックを待ってブロックしているプロセスはシグナルで起こされるかもしれません。
索引
戻り値
Rv -std flock
索引
エラー
Fn flock
システムコールは次の場合に失敗します:
- Bq Er EWOULDBLOCK
-
ファイルはすでに
LOCK_NB
オプションが指定された状態でロックされています。
- Bq Er EBADF
-
引数
Fa fd
が無効な記述子を指しています。
- Bq Er EINVAL
-
引数
Fa fd
がファイル以外のオブジェクトを参照しています。
- Bq Er EOPNOTSUPP
-
引数
Fa fd
がファイルのロックをサポートしないオブジェクトを参照しています。
索引
関連項目
close(2),
dup(2),
execve(2),
fcntl(2),
fork(2),
open(2),
lockf(3)
索引
歴史
Fn flock
システムコールは
BSD 4.2
で登場しました。
索引
Index
- 名称
-
- ライブラリ
-
- 書式
-
- 解説
-
- 注
-
- 戻り値
-
- エラー
-
- 関連項目
-
- 歴史
-
Time: 07:06:25 GMT, January 12, 2009