Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ flock(2) — NEWS-os 4.1C

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

open(2)

close(2)

dup(2)

execve(2)

fork(2)

FLOCK(2)  —  NEWS-OS Programmer’s Manual

名称

flock − オープンされているファイルに対してアドバイザリロックを 適用する/解除する

形式

#include <sys/file.h>

#defineLOCK_SH1/∗ shared lock ∗/
#defineLOCK_EX2/∗ exclusive lock ∗/
#defineLOCK_NB4/∗ don’t block when locking ∗/
#defineLOCK_UN8/∗ unlock ∗/

flock(fd, operation)
int fd, operation;

解説

flock は、 ディスクリプタ fd に関するファイルに対し、 アドバイザリロックの適用または解除を行います。 ロックは、LOCK_SH,LOCK_EX または LOCK_NB などの論理和より作られる operation パラメタを指定することによって適用されます。 既存のロックを解除するためには、 operation を LOCK_UN にします。

アドバイザリロックを 使用することによって、 協調して稼働する複数のプロセスは、 複数のファイルに対して矛盾のないオペレーションを 遂行することができます。 しかし、 アドバイザリロックは一貫性を 保証してはいません。 (つまり、 それらのプロセスはアドバイザリロックを 使用しないでファイルにアクセスすることができるので、 その結果矛盾が生じる可能性があるということです。)

ロックメカニズムでは2つのタイプのロックが可能です。 それらは、 共有 ロックと 排他的 ロックです。 いつでも複数の共有ロックを 1個のファイルに対して適用することはできますが、 複数の排他的ロック または共有ロックと排他的ロックの両方を、 同時に 1個のファイルに対して適用することはできません。

適切なロックタイプを 指定するだけで、 共有ロックを排他的ロックへ グレードアップ することができ、 その逆も可能です。 これを行うと、 以前のロックが解除されて新しいロックが適用されます(普通、 これは他のプロセスがあるロックを 獲得して解放したあとに行われます)。

既にロックされているファイルに対してロックを 要求すると、 通常、 その呼び出し元は、 そのロックを 獲得できるようになるまでブロックされます。 LOCK_NB が operation に含まれている場合には、 これは発生しません。 代わりにそのコールは失敗に終わり、 エラー EWOULDBLOCK が返されます。

注意事項

ロックは、 ファイルディスクリプタではなく、 ファイルに対するものです。 つまり、 dup(2) や fork(2) で二重化すると、複数のロックができるのではなく、 単一のロックに対する複数の参照を 生じさせることとなります。 あるファイルに対してロックを 保持しているプロセスが新しいプロセスを 作った場合に、 その子プロセスが明示的にそのファイルを ロック解除すると、 親プロセスは保持していたロックを失います。

ロック解除を待っているプロセスは、 シグナルによって起こされます。

リターン値

オペレーションが成功した場合には、 0 が返されます。 エラーが発生すると、 −1 が返され、 エラーコードがグローバル変数 errno に入れられます。

エラー

次の場合、 flock コールは失敗します。

[EWOULDBLOCK] ファイルが既にロックされていて、 LOCK_NB オプションが指定された。

[EBADF] 引数 fd が無効なディスクリプタである。

[EINVAL] 引数 fd がファイル以外のオブジェクトを指している。

関連事項

open(2), close(2), dup(2), execve(2), fork(2)

NEWS-OSRelease 4.1C

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026