.\" Copyright (c) 1983, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" @(#)flock.2 8.2 (Berkeley) 12/11/93 .\" %FreeBSD: src/lib/libc/sys/flock.2,v 1.23 2004/07/02 23:52:13 ru Exp % .\" .\" $FreeBSD$ .Dd December 11, 1993 .Dt FLOCK 2 .Os .Sh 名称 .Nm flock .Nd "開いたファイル上の問合せ型ロックを適用または除去する" .Sh ライブラリ .Lb libc .Sh 書式 .In sys/file.h .Fd "#define LOCK_SH 0x01 /* 共有ファイルロック */" .Fd "#define LOCK_EX 0x02 /* 排他的ファイルロック */" .Fd "#define LOCK_NB 0x04 /* ロックするときにブロックしない */" .Fd "#define LOCK_UN 0x08 /* ファイルをアンロックする */" .Ft int .Fn flock "int fd" "int operation" .Sh 解説 .Fn flock システムコールは、ファイル記述子 .Fa fd に対応するファイル上の .Em 問合せ型 ロックを適用または除去します。 ロックを適用するには、 .Fa operation 引数に .Dv LOCK_SH または .Dv LOCK_EX のいずれかと、必要であれば .Dv LOCK_NB を加えて指定します。 既存のロックをアンロックする場合は .Dv operation を .Dv LOCK_UN にしてください。 .Pp 問合せ型ロックは、協同するプロセス間での一貫したファイル操作を 可能にしますが、ファイルの一貫性を保証する ものではありません (すなわち、プロセスは問合せ型ロックを使用せずに ファイルにアクセスできるので、その結果一貫性がなくなる可能性があります)。 .Pp ロックメカニズムは .Em 共有 ロックと .Em 排他的 ロックという 2 つのタイプのロックを提供します。 いつでも複数の共有ロックを 1 つのファイルに適用できます。 しかし、同時に 1 つのファイルに複数の排他的ロック、 または共有ロックと排他的ロックの両方を適用することはできません。 .Pp 適切なロックのタイプを指定するだけで、共有ロックは排他的ロックに .Em アップグレード でき、排他的ロックを共有ロックに .Em ダウングレード できます。 その結果として前のロックは解放されて 新しいロックが適用されます (他のプロセスがロックを取得し 解放した後かもしれません)。 .Pp 既にロックされているオブジェクトについてロックを要求すると、 ロックが獲得できるまで呼び出し側はブロックされます。 ただし .Dv LOCK_NB が .Fa operation に含まれる場合はブロックされません。 代わりに呼び出しが失敗し、エラー .Er EWOULDBLOCK が返されます。 .Sh 注 ロックはファイルにかけられるものであって、 ファイル記述子にかけられるものではありません。 すなわち、 .Xr dup 2 または .Xr fork 2 によって複製されたファイル記述子は、 ロックの複数のインスタンスとはならずに、1 つのロックへの複数の 参照になります。 あるファイルについてのロックを保持しているプロセスがフォークし、 子プロセスが明示的にそのファイルをアンロックする場合、 親プロセスはそのロックを失います。 .Pp .Fn flock , .Xr fcntl 2 および .Xr lockf 3 のロックは互換性があります。 異なったロックのインタフェースを使用するプロセスは、 同じファイルを安全に使用することができます。 しかしながら、同じプロセスの内部では これらのインタフェースのうちの 1 つのみが使用されるべきです。 .Fn flock を介してあるプロセスによってあるファイルがロックされている場合、 .Xr fcntl 2 または .Xr lockf 3 を使用している他のプロセスの視点からは、 そのファイルの中のあらゆるレコードはロックされているかのように見えます。 また、その逆も同様です。 .Pp ロックを待ってブロックしているプロセスはシグナルで起こされるかもしれません。 .Sh 戻り値 .Rv -std flock .Sh エラー .Fn flock システムコールは次の場合に失敗します: .Bl -tag -width Er .It Bq Er EWOULDBLOCK ファイルはすでに .Dv LOCK_NB オプションが指定された状態でロックされています。 .It Bq Er EBADF 引数 .Fa fd が無効な記述子を指しています。 .It Bq Er EINVAL 引数 .Fa fd がファイル以外のオブジェクトを参照しています。 .It Bq Er EOPNOTSUPP 引数 .Fa fd がファイルのロックをサポートしないオブジェクトを参照しています。 .El .Sh 関連項目 .Xr close 2 , .Xr dup 2 , .Xr execve 2 , .Xr fcntl 2 , .Xr fork 2 , .Xr open 2 , .Xr lockf 3 .Sh 歴史 .Fn flock システムコールは .Bx 4.2 で登場しました。