Provided by: manpages-ja-dev_0.5.0.0.20131015+dfsg-2_all bug

名前

       lockf - オープンされたファイルに対する POSIX ロックの適用・テスト・解除を行う

書式

       #include <unistd.h>

       int lockf(int fd, int cmd, off_t len);

   glibc 向けの機能検査マクロの要件 (feature_test_macros(7)  参照):

       lockf():
           _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

説明

       オープンされたファイルのセクションに対して、  POSIX ロックの適用・テスト・解除をする。 ファイルは fd で指
       定される。 fd は書き込みのためにオープンしたファイルディスクリプタである。  アクションは  cmd  で指定され
       る。  pos  を現在のファイル位置とすると、  len が正の場合、セクションはバイト位置 pos..pos+len-1 となり、
       len が負の場合、セクションはバイト位置 pos-len..pos-1 となる。 len が 0  の場合、セクションは現在のファイ
       ル位置から無限大までとなる  (つまり現在の、あるいは変更された場合は将来の、ファイル終端位置まで)。 どの場
       合においても、セクションは以前のファイル終端よりも拡大されうる。

       Linux では、 lockf()  は単に fcntl(2)  のロックへのインターフェースである。 多くの他のシステムで  lockf()
       はこのように実装されているが、  POSIX.1-2001  では  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 であり、このロック操作を行うとデッドロックが発生してしまう。

       EINVAL fd に無効な操作が指定された。

       ENOLCK 非常に多くのセグメントロックが開かれ、ロックテーブルが一杯である。

準拠

       SVr4, POSIX.1-2001.

関連項目

       fcntl(2), flock(2)

       Linux  カーネルソースの  Documentation/filesystems  ディレクトリにある locks.txtmandatory-locking.txt
       (以前のカーネルでは、これらのファイルは Documentation ディレクトリ直下にあり、  mandatory-locking.txtmandatory.txt という名前であった。)

この文書について

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