![Linux の O_APPEND モードでのファイルに対するアトミック書き込みと通知](https://rvso.com/image/154444/Linux%20%E3%81%AE%20O_APPEND%20%E3%83%A2%E3%83%BC%E3%83%89%E3%81%A7%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8B%E3%82%A2%E3%83%88%E3%83%9F%E3%83%83%E3%82%AF%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%A8%E9%80%9A%E7%9F%A5.png)
私は、多数のプロセスとそれらのプロセス内の多数のスレッドを持つアプリケーションの状態を永続的に保存したいという状況に対処しています。通常、これには競合が発生しないようにするためにロックを多用する必要があります。
これを回避したいので、O_APPEND モードでデータをファイルに保存します。この方法では、データが 4KiB 未満であることを保証している限り、ファイルへの書き込みはアトミックになります。追加専用のデータ構造を使用すると、ロックフリーのソリューションが得られます。
ただし、これを機能させるには、ファイルに書き込んだ後にファイル内のデータの場所を知る必要があります。私が直面している問題は、ファイルに書き込み、書き込まれたファイル内のオフセットを知らせるシステム コールが見つからないことです。
この場所を見つけるには、書き込みの後にシークを使用できます。ただし、別のスレッドが同じファイル記述子を共有している場合は安全ではないため、書き込みをミューテックスで保護する必要がありますが、これはロックを回避するための私の努力に反します。
write、writev、pwrite、prwritev のマニュアル ページを調べても、書き込みを実行してから書き込み後のオフセットを単一のシステム コールとして通知するものは何も示されていません。また、そのようなものは存在しない可能性があることも十分に認識しています。何か見落としているのでしょうか?