私はPerlベースのファイル同期ツールに取り組んでいます。ファイルを一時ディレクトリ(実際のファイルと同じファイルシステム上にあることが保証されています)にダウンロードしてから、一時ファイルを古いファイルの上に移動し、アクセス許可、所有権、ACLなどのメタデータを保持します。Linuxでその最後のステップをどのように達成するのか疑問に思っています。
Mac OS Xでは、少なくともCでは、このexchangedata関数を使用します。これは、引数として2つのファイル名を取り、それらの内容を交換して、すべてのメタデータ(mtimeを除く)をそのまま残します。これにより、操作がアトミックであることが保証されます。すべてのリーダーには、古いファイルまたは新しいファイルのいずれかが表示され、その間に何かが表示されることはありません。残念ながら、Linuxでは利用できないと思います。
アトミックに移動することは知っていrenameますが、メタデータは保持されません。一方、ファイルを開いてデータを新しいコンテンツで上書きすることもできます。これにより、すべてのメタデータが保持されますが、不可分操作にはなりません。この問題に取り組むための提案はありますか?