「ファイルロック」の版間の差分

削除された内容 追加された内容
→‎Linux: 外部リンク修正
Mtakahas (会話 | 投稿記録)
64行目:
<tt>flock</tt>にも<tt>fcntl</tt>にも、他のオペレーティングシステムに慣れたプログラマから見ると奇異な点がある。
 
<tt>flock</tt>は [[Network File System|NFS]] などの[[分散ファイルシステム|ネットワークファイルシステム]]では実装により機能しない場合がある。[[BSD]]では何も起きないし、Linuxではエラーとなる。同じファイルへの(ひとつのプロセスからの)<tt>flock</tt>呼び出しは、ロックの状態を変更する(共有から排他へ、あるいは排他から共有へ)。しかし、このとき一時的に古いロックを外してから新しいロックをかける。例えば、排他ロックから共有ロックにかけ変えようとしたとき、一瞬の隙をついて別のプロセスが排他ロックをかけたら、元々ロックをかけていたプロセスが締め出されてしまう。
 
プロセスはひとつのファイルに対応する[[ファイル記述子]]を複数個持つことができる。このうちのいずれかを使って<tt>fcntl</tt>でロックをかけていたとする。このとき、同じファイルに対応する別のファイル記述子をクローズすると、そのファイル上にそのプロセスが設定した全ロックが解除されてしまう。また、<tt>fcntl</tt>のロックは[[子プロセス]]に受け継がれない。この<tt>fcntl</tt>のクローズに関連した動作は、ライブラリのサブルーチン内でファイルにアクセスすることが多いアプリケーションなどで問題を発生することが多い。