LOCKF
Section: Linux Programmer's Manual (3)
Updated: 2007-07-26
Index
JM Home Page
roff page
名前
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
説明
開いているファイルのセクションに対して、
POSIX ロックの適用・テスト・解除をする。
ファイルは
fd
で指定される。
これは書き込みのためにオープンしたファイルディスクリプタである。
アクションは
cmd
で指定される。
pos
を現在のファイル位置とすると、
len
が正の場合、セクションはバイト位置
pos..pos+len-1
である。
len
が負の場合、セクションはバイト位置
pos-len..pos-1
である。
len
が 0 の場合、セクションは現在のファイル位置から無限大までとなる
(つまり現在の、あるいは変更された場合は将来の、ファイル終端位置まで)。
どの場合においても、セクションは以前のファイル終端よりも拡大されうる。
Linux では、この関数は単に
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
が開いているファイルのディスクリプタではない。
- EDEADLK
-
コマンドが
T_LOCK
であり、このロック操作がデッドロックを引き起こしている。
- EINVAL
-
fd
に無効な操作が指定された。
- ENOLCK
-
非常に多くのセグメントロックが開かれ、ロックテーブルが溢れた。
準拠
SVr4, POSIX.1-2001
関連項目
fcntl(2),
flock(2)
/usr/src/linux/Documentation
にある
locks.txt
と
mandatory.txt
も参照すること。
Index
- 名前
-
- 書式
-
- 説明
-
- 返り値
-
- エラー
-
- 準拠
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:50 GMT, November 19, 2007