dup2は書き込み/読み取りに関して原子的です。

dup2は書き込み/読み取りに関して原子的です。

O_APPEND書き込みフラグを持つ読み取り/書き込み用のファイル記述子4があるとします。このファイルに書き込むスレッドが複数あり、fd 4が指すファイルを定期的に切り替えたい場合は、dup2呼び出しを実行してfd 4を新しいファイルに置き換えようとします。同時に、複数のスレッドは書き込みのためにfd 4を指しています。データが失われますか?それとも、移行中に書き込み中のスレッドにエラーが発生しますか?

ベストアンサー1

LinuxのマニュアルページとPOSIXの説明は、これが実際にアトミックであることをかなり明確に示しています。

Linuxのマニュアルページからdup2():

ファイル記述子を閉じて再利用するステップは、newfd原子的に行われます。

POSIX、「基本」の下:

一方、dup2()他のインターフェースは既存のファイル記述子を自動的に置き換えることができないため、関数は独自のサービスを提供します。

ファイル記述子を開いたり閉じたりコピーしたりするという点ではアトミックでなければなりませんが、読み取りまたは書き込みの面ではそうでない理由はありません。

おすすめ記事