O_APPEND
書き込みフラグを持つ読み取り/書き込み用のファイル記述子4があるとします。このファイルに書き込むスレッドが複数あり、fd 4が指すファイルを定期的に切り替えたい場合は、dup2呼び出しを実行してfd 4を新しいファイルに置き換えようとします。同時に、複数のスレッドは書き込みのためにfd 4を指しています。データが失われますか?それとも、移行中に書き込み中のスレッドにエラーが発生しますか?
ベストアンサー1
LinuxのマニュアルページとPOSIXの説明は、これが実際にアトミックであることをかなり明確に示しています。
ファイル記述子を閉じて再利用するステップは、
newfd
原子的に行われます。
一方、dup2()他のインターフェースは既存のファイル記述子を自動的に置き換えることができないため、関数は独自のサービスを提供します。
ファイル記述子を開いたり閉じたりコピーしたりするという点ではアトミックでなければなりませんが、読み取りまたは書き込みの面ではそうでない理由はありません。