.\" Copyright 1997 Nicolás Lichtmaier .\" Created Thu Aug 7 00:44:00 ART 1997 .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\" .\" Added section stuff, aeb, 2002-04-22. .\" Corrected include file, drepper, 2003-06-15. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2000-2002 Yuichi SATO .\" all rights reserved. .\" Translated Tue Jul 11 19:02:58 JST 2000 .\" by Yuichi SATO .\" Updated & Modified Mon Jul 15 02:10:29 JST 2002 by Yuichi SATO .\" Updated 2010-04-18, Akihiro MOTOKI , LDP v3.24 .\" .TH LOCKF 3 2014\-06\-13 GNU "Linux Programmer's Manual" .SH 名前 lockf \- オープンされたファイルに対する POSIX ロックの適用・テスト・解除を行う .SH 書式 \fB#include \fP .sp \fBint lockf(int \fP\fIfd\fP\fB, int \fP\fIcmd\fP\fB, off_t \fP\fIlen\fP\fB);\fP .sp .in -4n glibc 向けの機能検査マクロの要件 (\fBfeature_test_macros\fP(7) 参照): .in .sp \fBlockf\fP(): .ad l .RS 4 _BSD_SOURCE || _SVID_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED .RE .ad .SH 説明 オープンされたファイルのセクションに対して、 POSIX ロックの適用・テスト・解除をする。 ファイルは \fIfd\fP で指定される。 \fIfd\fP は書き込みのためにオープンしたファイルディスクリプターである。 アクションは \fIcmd\fP で指定される。 \fIpos\fP を現在のファイル位置とすると、 \fIlen\fP が正の場合、セクションはバイト位置 \fIpos\fP..\fIpos\fP+\fIlen\fP\-1 となり、 \fIlen\fP が負の場合、セクションはバイト位置 \fIpos\fP\-\fIlen\fP..\fIpos\fP\-1 となる。 \fIlen\fP が 0 の場合、セクションは現在のファイル位置から無限大までとなる (つまり現在の、あるいは変更された場合は将来の、ファイル終端位置まで)。 どの場合においても、セクションは以前のファイル終端よりも拡大されうる。 .LP Linux では、 \fBlockf\fP() は単に \fBfcntl\fP(2) のロックへのインターフェースである。 多くの他のシステムで \fBlockf\fP() はこのように実装されているが、 POSIX.1\-2001 では \fBlockf\fP() と \fBfcntl\fP(2) のロックとの関係は規定されていない。 おそらく、移植性が必要なアプリケーションでは、 \fBlockf\fP() と \fBfcntl\fP(2) のロックを混ぜて呼び出すのは避けるべきであろう。 .LP 有効なオプションを以下に挙げる。 .TP \fBF_LOCK\fP ファイルの指定されたセクションに排他ロックを設定する。 そのセクション (の一部) が既にロックされていた場合、 前のロックが解除されるまで関数の呼び出しがブロックされる。 このセクションが前にロックされているセクションと重なった場合、 2 つのセクションは結合される。 ロックを保持しているプロセスが、 そのファイルのファイルディスクリプターをクローズすると、 ファイルロックは解放される。 子プロセスはロックを継承しない。 .TP \fBF_TLOCK\fP \fBF_LOCK\fP と同様であるが、ファイルが既にロックされている場合、 関数の呼び出しはブロックを行わずにエラーを返す。 .TP \fBF_ULOCK\fP ファイルの指定されたセクションのロックを解除する。 これによりロックされたセクションが 2 つに分割されるかもしれない。 .TP \fBF_TEST\fP 次のようにロックのテストをする。 指定されたセクションがロックされていないか、 このプロセスによりロックされている場合、0 を返す。 他のプロセスがロックを保持している場合、\-1 を返し、 \fIerrno\fP を \fBEAGAIN\fP (いくつかの他のシステムでは \fBEACCES\fP) に設定する。 .SH 返り値 成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。 .SH エラー .TP \fBEACCES\fP か \fBEAGAIN\fP ロックされたファイルに対して、 \fBF_TLOCK\fP または \fBF_TEST\fP が指定されている。 または、ファイルが他のプロセスによりメモリーマップされており、 指定された操作が禁止されている。 .TP \fBEBADF\fP \fIfd\fP がオープンされたファイルのディスクリプターではない。 または、 \fIcmd\fP が \fBF_LOCK\fP か \fBF_TLOCK\fP で、 \fIfd\fP が書き込み可能なファイルディスクリプターでない。 .TP \fBEDEADLK\fP コマンドが \fBF_LOCK\fP であり、このロック操作を行うとデッドロックが発生してしまう。 .TP \fBEINVAL\fP \fIcmd\fP に無効な操作が指定された。 .TP \fBENOLCK\fP 非常に多くのセグメントロックが開かれ、ロックテーブルが一杯である。 .SH 属性 .SS "マルチスレッディング (pthreads(7) 参照)" \fBlockf\fP() 関数はスレッドセーフである。 .SH 準拠 SVr4, POSIX.1\-2001. .SH 関連項目 \fBfcntl\fP(2), \fBflock\fP(2) Linux カーネルソースの \fIDocumentation/filesystems\fP ディレクトリにある \fIlocks.txt\fP と \fImandatory\-locking.txt\fP (以前のカーネルでは、これらのファイルは \fIDocumentation\fP ディレクトリ直下にあり、 \fImandatory\-locking.txt\fP は \fImandatory.txt\fP という名前であった。) .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。