総合手引 | セクション 3 | English | オプション |
#include <unistd.h>
引数 filedes は、対象ファイルの記述子です。ファイル記述子は、 書き込みのみ (O_WRONLY)、または読み込み / 書き込み両方 (O_RDWR) のどちらかで操作できる必要があります。引数 function は所要動作を定義する制御値です。 Function で指定できる値は次のとおりです。
Function | |
解説 | |
F_ULOCK | ロックされているセクションのロック解除 |
F_LOCK | セクションの排他的使用のロック |
F_TLOCK | セクションの排他的使用のテストとロック |
F_TEST | セクションの他プロセスによるロック状況をテスト |
F_ULOCK は、ファイルのセクションからロックを解除します。 F_LOCK および F_TLOCK は、どちらも、セクションが使用可能状態ならばロックします。 F_TEST は、他プロセスが指定のセクション上にあるかどうかを検査します。
引数 size は、ロックまたはロック解除対象のバイト数を示しています。 ロックまたはロック解除対象のセクションは、ファイル上の現在のオフセットを 開始地点とし、前方向であれば正符号の長さで、後ろ方向であれば負の長さで 表します。(現在のオフセット値を除く後続する範囲のバイト数) しかし、 ファイルの先頭より前を開始点または対象範囲とすることはできません。 size が 0 の場合、セクションは現在の地点からファイル上で取りうる最大範囲の地点まで ロックされます (すなわち、現在の地点から現時点のまたは今後拡張するファイル の終了部分までです)。
F_LOCK または F_TLOCK でロックされたセクションは、同一プロセスで 先行してロックされたセクションの全体または一部を含むかあるいは 含まれることがあります。この場合、またはロックされたセクションが 隣接するとき、これらのセクションは一つのロックされたセクションに 統合されます。要求によりロックの数がシステムで定めた限界を超えた場合、 要求はエラーになります。
F_LOCK および F_TLOCK による要求は、セクションが利用不可の 場合それぞれの取る動作について差異があります。 F_LOCK は、セクションが 利用可能になるまで呼び出しプロセスを抑制します。 F_TLOCK では、他プロセスが 既にロックしている場合、関数はエラーになります。
ファイルのロックは、ファイルの記述子のロックプロセスが終了して初めて 解除されます。
F_ULOCK 要求は、プロセスで制御される複数のロックされた セクション (全体または一部) を解放します。ロックされたセクションは、現在の ファイル上の地点から size で示す長さのバイト数分、またはサイズ指定が 0 の場合 ファイルの終了位置まで、ロックが解除されます。ロックされたセクション がすべて解放されないとき (すなわち、ロック解除される区域の最初の部分または 終りの部分がロックされたセクションにあるとき)、セクションの残りの部分は プロセスにより引き続きロックされます。ロックされたセクションの中心部分を 解放することにより、ロックされた残りの部分は、先頭区域と終りの区域の 2 つの セクションに分離されます。要求により、システム内のロックの数が、システムで 定めた制限値を越える場合、その要求の処理は不成功になります。
F_ULOCK 要求は、サイズ指定が 0 でなく、要求されたセクションの最終バイトの 位置が、off_t 型のオブジェクトに対する最大値を越えない場合、 またはプロセス内にサイズ 0 のロックがあり、要求対象セクションの最終バイトを 含んでいる場合、サイズ 0 の要求対象セクションの開始位置からロック解除する 要求として扱われます。そうでない場合、 F_ULOCK 要求は、要求対象のセクションだけをロック解除しようとします。
ロックされている区域を制御しているプロセスが、他プロセスでロック されている区域をロックしようとしてスリープ状態になると、デッドロックが 起こる可能性があります。この仕組みにより、ロックされた区域が ロック解除されるまでのスリープがデッドロックを起こし、 EDEADLK エラーで異常終了することを検出できます。
lockf(), fcntl(2) および flock(2) によるロックは同時併行で問題なく使用できます。 セクションでの防護処理は適当なシグナルで解釈されます。
[EAGAIN] | |
引数 function は、 F_TLOCK または F_TEST であり、 セクションはすでに他のプロセスによりロックされています。 | |
[EBADF] | |
引数
filedes
は妥当でない対象ファイル記述子です。
引数
function
F_TLOCK
または
F_TEST
であり、引数
filedes
は書き込み可能ファイルとして妥当なファイル記述子ではありません。
| |
[EDEADLK] | |
引数
function
は
F_LOCK
であり、デッドロックが検出されました。
| |
[EINTR] | |
引数
function
は
F_LOCK
であり、
lockf()
がシグナル発生により中断されました。
| |
[EINVAL] | |
引数
function
が
F_ULOCK,
F_LOCK,
F_TLOCK,
or
F_TEST
のどれにも該当しません。
引数 filedes がロックをサポートしないファイルを示しています。
| |
[ENOLCK] | |
引数 function は F_ULOCK, F_LOCK, または F_TLOCK であり、 ロックまたはロック解除の要求により、 ロック区域の数がシステムで定めた 制限値を越えます。 | |
LOCKF (3) | December 19, 1997 |
総合手引 | セクション 3 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | "I liken starting one's computing career with Unix, say as an undergraduate, to being born in East Africa. It is intolerably hot, your body is covered with lice and flies, you are malnourished and you suffer from numerous curable diseases. But, as far as young East Africans can tell, this is simply the natural condition and they live within it. By the time they find out differently, it is too late. They already think that the writing of shell scripts is a natural act." | ” |
— Ken Pier, Xerox PARC |