1

重複の可能性:
fork() するときにファイル記述子は共有されますか?

Linux に次のコードがあるとします。

int main()
{
   FILE* f = fopen("file.txt", "w");
   fork();
   fwrite("A", 1, 1, f);
   fclose(f);
   return 0;
}

ドキュメントから私が知ってforkいることは、現在のプロセスのコピーを作成するということです。メモリの状態もコピーするため、両方のインスタンスで *f が等しくなるはずです。しかし、ファイル ハンドルなどのシステム リソースはどうなるでしょうか。この例では、書き込み目的でファイルを開いているので、ファイルに書き込むことができるのは 1 つのインスタンスだけですよね? 実際にファイルに書き込むインスタンスはどれですか? ファイルハンドルをさらに気にして、 fclose() を呼び出す必要があるのは誰ですか?

4

1 に答える 1

1

両方のプロセスがハンドルを取得します。どちらも書き込み可能ですが、現在のオフセットを共有します。両方とも閉じる必要があり、それぞれが独自のハンドルを閉じます。

于 2012-06-24T21:30:03.477 に答える