Не распечатывает в файл, используя fprintf с fork () - PullRequest
0 голосов
/ 23 марта 2012

Итак, у меня проблема с моим кодом, и это сводит меня с ума, так как я не могу понять, что является причиной этого. По сути, я пытаюсь записать в файл, который я открыл, используя несколько дочерних процессов с помощью 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 голосов
/ 23 марта 2012

Открытие дескриптора файла и его использование в более чем одном процессе (например, в родительском и дочернем процессах) является условием гонки и, скорее всего, вызовет проблемы и непредсказуемое поведение.

...