1

可能重复:
fork() 时是否共享文件描述符?

假设我在 linux 中有以下代码:

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

fork从文档中了解到的是,它会复制当前流程。它也复制内存的状态,因此 *f 在两种情况下都应该相等。但是系统资源会发生什么,例如文件句柄?在此示例中,我以写入意图打开文件,因此只有一个实例可以写入文件,对吗?哪些实例实际上会写入文件?谁应该进一步关心文件句柄并调用 fclose() ?

4

1 回答 1

1

两个进程都有一个句柄。两者都可以写入,但将共享当前偏移量。两者都应该关闭,每个都关闭自己的句柄。

于 2012-06-24T21:30:03.477 回答