flock(),fcntl()とアドバイザリ・ロックについての短いまとめ
flock(), fcntl()とロックについては、本来であれば各コンポーネント - PHP/Perl/BSD/LinuxKernel/glibc などのソースコードを丁寧に追う必要があるが、凡夫はそこの手前で満足する。また、BSD/Linuxについてはflock()によりfork()/dup2()などファイル記述子が複製されるケースでロックの継承が可能だが、それ以外の*nixについてはマニュアルや実装を調べる必要がある。
結局POSIX/SUSで規定されるロックは全て「アドバイザリ・ロック」(advisory lock)と言う種類に分類される。「強制ロック」(mandatory lock)はBSD/Linuxでは実装されているものの、その他*nix系OSでの実装状況は当てにしない方が賢明である。
またRead/Writeバッファも密接に絡むらしい。殊PHPについて言えば、
http://testwiki.xn--xnq.jp/index.php?PHP
の"PHP/ファイルロック/設計"ページが手本となる。
ずうっと前から気になっていた「アドバイザリ・ロック」については、これにて一旦、リベンジ完了とする。しかし、ファイルのロックという基本的に思える操作一つ取ってみてもこれほど奥が深い。翻れば、改めて自分の浅学を思い知らされた。