チェックサムが一致しない場合はスタックするため、open、unlink、checksum、closeの提案はそのままでは機能しません(ファイル記述子によって指定されたファイルへのリンクを作成するPOSIXポータブルな方法はありません) )。より良いバリアントは、rename、checksum、unlink、closeです。これにより、名前の変更を元に戻したり、チェックサムが一致しない場合にコピーをやり直したりできます。その間に3番目のプログラムがファイルを再作成した場合は、何をしたいかを考える必要があります。
POSIXは協調ロックのみを提供します。ファイルを変更する可能性のあるプログラムを制御できる場合は、それらがロックを使用していることを確認してください。それがオプションでない場合は、ロックなしで立ち往生しています。
どのプロセスがファイルを開いたか(または開いたかどうか)を確認するための移植可能な方法はありません。ほとんどのUnixシステムでは、lsof
が表示されますが、これは普遍的ではなく、堅牢ではなく(プログラムは検索を終了した直後にファイルを開く可能性がありますlsof
)、不完全です(ファイルがNFS経由でエクスポートされる場合、アクティブなクライアント)。
rsyncやunisonなど、他の同期プログラムが実行していることを確認することでメリットが得られる場合があります。