Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all 

名前
lockf - オープンされたファイルに対する POSIX ロックの適用・テスト・解除を行う
書式
#include <unistd.h>
int lockf(int fd, int cmd, off_t len);
glibc 向けの機能検査マクロの要件 (feature_test_macros(7) 参照):
lockf():
_XOPEN_SOURCE >= 500
|| /* Glibc 2.19 以降: */ _DEFAULT_SOURCE
|| /* glibc 2.19 以前: */ _BSD_SOURCE || _SVID_SOURCE
説明
オープンされたファイルのセクションに対して、 POSIX ロックの適用・テスト・解除をする。 ファイルは fd で指
定される。 fd は書き込みのためにオープンしたファイルディスクリプターである。 アクションは cmd で指定され
る。 pos を現在のファイル位置とすると、 len が正の場合、セクションはバイト位置 pos..pos+len-1 となり、
len が負の場合、セクションはバイト位置 pos-len..pos-1 となる。 len が 0 の場合、セクションは現在のファイ
ル位置から無限大までとなる (つまり現在の、あるいは変更された場合は将来の、ファイル終端位置まで)。 どの場
合においても、セクションは以前のファイル終端よりも拡大されうる。
Linux では、 lockf() は単に fcntl(2) のロックへのインターフェースである。 多くの他のシステムで lockf()
はこのように実装されているが、 POSIX.1 では lockf() と fcntl(2) のロックとの関係は規定されていない。 お
そらく、移植性が必要なアプリケーションでは、 lockf() と fcntl(2) のロックを混ぜて呼び出すのは避けるべき
であろう。
有効なオプションを以下に挙げる。
F_LOCK ファイルの指定されたセクションに排他ロックを設定する。 そのセクション (の一部) が既にロックされて
いた場合、 前のロックが解除されるまで関数の呼び出しがブロックされる。 このセクションが前にロックさ
れているセクションと重なった場合、 2 つのセクションは結合される。 ロックを保持しているプロセスが、
そのファイルのファイルディスクリプターをクローズすると、 ファイルロックは解放される。 子プロセスは
ロックを継承しない。
F_TLOCK
F_LOCK と同様であるが、ファイルが既にロックされている場合、 関数の呼び出しはブロックを行わずにエ
ラーを返す。
F_ULOCK
ファイルの指定されたセクションのロックを解除する。 これによりロックされたセクションが 2 つに分割さ
れるかもしれない。
F_TEST 次のようにロックのテストをする。 指定されたセクションがロックされていないか、 このプロセスにより
ロックされている場合、0 を返す。 他のプロセスがロックを保持している場合、-1 を返し、 errno を
EAGAIN (いくつかの他のシステムでは EACCES) に設定する。
返り値
成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。
エラー
EACCES か EAGAIN
ロックされたファイルに対して、 F_TLOCK または F_TEST が指定されている。 または、ファイルが他のプロ
セスによりメモリーマップされており、 指定された操作が禁止されている。
EBADF fd がオープンされたファイルのディスクリプターではない。 または、 cmd が F_LOCK か F_TLOCK で、 fd
が書き込み可能なファイルディスクリプターでない。
EDEADLK
コマンドが F_LOCK であり、このロック操作を行うとデッドロックが発生してしまう。
EINTR ロックの獲得を待っている間に、ハンドラーにより捕捉されたシグナルを 受信し、 flock() が中断され
た。 signal(7) 参照。
EINVAL cmd に無効な操作が指定された。
ENOLCK 非常に多くのセグメントロックが開かれ、ロックテーブルが一杯である。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。
┌──────────────────┬───────────────┬─────────┐
│ インターフェース │ 属性 │ 値 │
├──────────────────┼───────────────┼─────────┤
│ lockf() │ Thread safety │ MT-Safe │
└──────────────────┴───────────────┴─────────┘
準拠
POSIX.1-2001, POSIX.1-2008, SVr4.
関連項目
fcntl(2), flock(2)
Linux カーネルソースの Documentation/filesystems ディレクトリにある locks.txt と mandatory-locking.txt
(以前のカーネルでは、これらのファイルは Documentation ディレクトリ直下にあり、 mandatory-locking.txt は
mandatory.txt という名前であった。)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告
に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
GNU 2019-03-06 LOCKF(3)