素朴な質問かもしれませんが、open
親呼び出し時にファイルIDが私に返されます4
。
子プロセスが次のことを保証されますか?いつも4
ファイルIDも取得しますか?
答え1
成功したopen
呼び出しは、未使用のファイル記述子として最小数を返します。
したがって、open
4 が返されると、ファイル記述子 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の説明を参照)。