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

名前

       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 を返し、 errnoEAGAIN (いくつかの他のシステムでは EACCES) に設定する。

返り値

       成功した場合は 0 が返される。エラーの場合は -1 が返され、 errno が適切に設定される。

エラー

       EACCESEAGAIN
              ロックされたファイルに対して、  F_TLOCK  または  F_TEST   が指定されている。   また
              は、ファイルが他のプロセスによりメモリーマップされており、 指定された操作が禁止され
              ている。

       EBADF  fd がオープンされたファイルのディスクリプターではない。 または、 cmdF_LOCKF_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.txtmandatory-locking.txt (以前のカーネルでは、これらのファイルは Documentation ディレクトリ直
       下にあり、 mandatory-locking.txtmandatory.txt という名前であった。)

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。