分岐された子プロセスは常に親プロセスのファイルIDと同じファイルIDを持ちますか?

分岐された子プロセスは常に親プロセスのファイルIDと同じファイルIDを持ちますか?

素朴な質問かもしれませんが、open親呼び出し時にファイルIDが私に返されます4

子プロセスが次のことを保証されますか?いつも4ファイルIDも取得しますか?

答え1

成功したopen呼び出しは、未使用のファイル記述子として最小数を返します。

したがって、open4 が返されると、ファイル記述子 0-3 はすでに使用中であることを意味します。 a はfork子プロセスに同じファイル記述子を提供するため、子プロセスも fd 0-3 を使用しており、fd 4 は使用可能なので、a の直後に親プロセスとopen子プロセスで 2 回の呼び出しが成功forkすると同じ番号が返されます。ただし、後で親または子がファイルを開いたり閉じたりすると、fork数字が変わる可能性があります。

open一般的に、妥当な理由があり、正しく予測できると確信していない限り、呼び出されたfdの予測には依存しないでください。

答え2

うん、みんな開いている分岐すると、ファイルIDが子にコピーされます。

バラより人間フォーク

子プロセスは、親プロセスのオープンファイル記述子セットのコピーを継承します。子の各ファイル記述子は、親の対応するファイル記述子と同じオープンファイル記述(open(2)を参照)を参照します。これは、2つの記述子が開かれたファイル状態フラグ、現在のファイルオフセット、および信号駆動I / O属性を共有することを意味します(fcntl(2)のF_SETOWNおよびF_SETSIGの説明を参照)。

関連情報