flock(2) FreeBSD 一般コマンドマニュアル

flock

前のページ 上に戻る 次のページ

flock




書式

     #include <sys/file.h>
     #define   LOCK_SH        0x01      /* B>共B>有B>フB>ァB>イB>ルB>ロB>ッB>ク */
     #define   LOCK_EX        0x02      /* B>排B>他B>的B>フB>ァB>イB>ルB>ロB>ッB>ク */
     #define   LOCK_NB        0x04      /* B>ロB>ッB>クB>すB>るB>とB>きB>にB>ブB>ロB>ッB>クB>しB>なB>い */
     #define   LOCK_UN        0x08      /* B>フB>ァB>イB>ルB>をB>アB>ンB>ロB>ッB>クB>すB>る */

     int
     flock(int fd, int operation);


解説

     flock() は、ファイル記述子 fd に対応するファイル上の 問合せ型ロックを適用
     または除去します。ロックを適用するには、パラメータの operation に LOCK_SH
     または LOCK_EX のいずれかと、必要であれば LOCK_NB を加えて指定します。既
     存のロックをアンロックする場合は operation を LOCK_UN にしてください。

     問合せ型ロックは、協同するプロセス間での一貫したファイル操作を可能にしま
     すが、ファイルの一貫性を保証するものではありません (すなわち、プロセスは
     問合せ型ロックを使用せずにファイルにアクセスできるので、その結果一貫性が
     なくなる可能性があります)。

     ロックメカニズムは 共有ロックと 排他的ロックという 2 つのタイプのロックを
     提供します。いつでも複数の共有ロックを 1 つのファイルに適用できます。しか
     し、同時に 1 つのファイルに複数の排他的ロック、または共有ロックと排他的
     ロックの両方を適用することはできません。

     適切なロックのタイプを指定するだけで、共有ロックは排他的ロックに アップグ
     レードでき、排他的ロックを共有ロックに ダウングレードできます。その結果と
     して前のロックは解放されて新しいロックが適用されます (他のプロセスがロッ
     クを取得し解放した後かもしれません)。

     既にロックされているオブジェクトについてロックを要求すると、ロックが獲得
     できるまで呼び出し側はブロックされます。ただし LOCK_NB が operation に含
     まれる場合はブロックされません。代わりに呼び出しが失敗し、エラー
     EWOULDBLOCK が返されます。


     ロックはファイルにかけられるものであって、ファイル記述子にかけられるもの
     ではありません。すなわち、 dup(2) または fork(2) によって複製されたファイ
     ル記述子は、ロックの複数のインスタンスとはならずに、1 つのロックへの複数
     の参照になります。あるファイルについてのロックを保持しているプロセスが
     フォークし、子プロセスが明示的にそのファイルをアンロックする場合、親プロ
     セスはそのロックを失います。

     ロックを待ってブロックしているプロセスはシグナルで起こされるかもしれませ
     ん。


実装に関する注

     非スレッドライブラリでは、 flock() は flock システムコールとして実装され
     ています。


     [EBADF]            引数 fd が無効な記述子を指しています。

     [EINVAL]           引数 fd がファイル以外のオブジェクトを参照しています。

     [EOPNOTSUPP]       引数 fd がファイルのロックをサポートしないオブジェクト
                        を参照しています。


関連項目

     close(2), dup(2), execve(2), fork(2), open(2)


歴史

     flock() 関数は 4.2BSD で登場しました。

FreeBSD 4.4                    December 11, 1993                   FreeBSD 4.4

ABELNET VPSサービス