不使用fprintf使用fork()打印到文件

时间:2012-03-23 16:43:20

标签: fork printf

所以我的代码出了问题,这让我疯狂,因为我似乎无法弄清楚是什么导致了这个问题。基本上,我正在尝试使用fork()使用多个子进程写入已打开的文件。在我开始分叉之前,我可以写它很好,但是一旦我fork,然后做一个if语句来查看它是否是子进程,它就不会写。

基本上,我所拥有的是:

FILE *output = NULL;
output = fopen(...); // Done successfully
fprintf(output, "This writes okay\n");
// Fork n processes
for (i = 0; i <= n; n++)
{
    pid[i] = fork();
    fprintf(output, "We can still write\n");
    if (pid[i] == 0) // Child process
    {
        fprintf(output, "This won't write to output\n");
        printf("I can still write and calculate stuff otherwise\n");
        ...
    }
}

任何人都可以弄清楚为什么在检查它是否是子进程后它无法写入?从我所看到的东西来看绝对没有错误。

1 个答案:

答案 0 :(得分:0)

打开文件描述符并在多个进程中使用它(例如在父进程和子进程中)是race condition,很可能会导致问题和不可预测的行为。