other versions
other sections
FLOCK(2) | Linux Programmer's Manual | FLOCK(2) |
名前¶
flock - オープンされたファイルに対するアドバイザリ・ロックの適用、解除を行う書式¶
#include <sys/file.h>説明¶
オープンされたファイルにアドバイザリ・ロック (advisory lock) の適用 や解除を行う。 ファイルは fd で指定する。引き数 operation には以下のいずれか一つを指定する:- LOCK_SH
- 共有ロックを適用する。 指定したファイルに対して、 一つ以上のプロセスが同時に共有ロックを保持することができる。
- LOCK_EX
- 排他ロックを適用する。 指定したファイルに対して、 ただ一つのプロセスだけが同時に排他ロックを保持することができる。
- LOCK_UN
- このプロセスが保持している既存のロックを解除する。
返り値¶
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。エラー¶
- EBADF
- fd がオープンされたファイル・ディスクリプタではない。
- EINTR
- ロックの獲得を待っている間に、ハンドラにより捕捉されたシグナルを 受信し、 flock() が中断された。 signal(7) 参照。
- EINVAL
- oepration が無効である。
- ENOLCK
- ロック・レコードを割り当てるためのメモリが不足している。
- EWOULDBLOCK
- 指定したファイルがロックされており、 LOCK_NB フラグが指定されている。
準拠¶
4.4BSD ( flock() コールは 4.2BSD で最初に登場した)。 fcntl(2) で実装されているものなどを含めると、 flock() の機能はほとんどの UNIX システムで実装されている。注意¶
flock() は NFS 上のファイルのロックをしない。代わりに fcntl(2) を使用すること。これにより、十分に新しいバージョンの Linux と、ロック機能を サポートした NFS サーバを使用することにより、NFS 上でロックができる。 kernel 2.0 以降では、 flock() は、GNU C ライブラリでの fcntl(2) を呼び出してのエミュレーションではなく、 それ自体がシステムコールとして実装されている。 これにより正真正銘の BSD での動作が達成される: flock() と fcntl(2) で適用されるロックの種別には相互作用がなくなり、 flock() がデッドロックを検出しなくなる。 flock() アドバイザリ・ロックだけを適用する。したがって、ファイルに適切なアクセス権を 付与していれば、プロセスは flock() の使用に無視して、ファイルへの入出力を行うことができる。 flock() と fcntl(2) は fork されたプロセスと dup(2) で違った動作をする。 flock() を fcntl(2) を使って実装しているシステムでは、 flock() の動作はこのマニュアル・ページに記載されているものとは違うだろう。 ロックの変換 (共有ロックから排他ロックへ、もしくはその反対) がアトミックに 行われることは保証されていない: 既存のロックがまず削除され、それから新しい ロックが設定される。この 2つのステップの間に、他のプロセスからの処理待ちの ロック要求が認められるかもしれず、結果として変換は停止 (block) したり、 ( LOCK_NB が指定された場合には) 失敗したりする。 (これは元々の BSD の動作であり、多くの他の実装でも起こる。)関連項目¶
close(2), dup(2), execve(2), fcntl(2), fork(2), open(2), lockf(3)この文書について¶
この man ページは Linux man-pages プロジェクトのリリース 3.41 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。2009-07-25 | Linux |