pid = fork();
if (pid == 0) val += 3;
if (val == 5) val++;
printf(“val=%d\n”, val);
Случай 1: После fork()
, родитель получает запланировано перед ребенком, и полная-х printf()
вызов успешно
val = 6; //printed by parent
val = 8; //printed by child
Случай 2: После того, как fork()
, родитель получает запланирован перед ребенком, и полная-х Е() звоните успешно
val = 8; //printed by child
val = 6; //printed by parent
- Проблема с printf()
и fork()
-
#include<stdio.h>
#include <sys/types.h>
int main()
{
printf("Before forking");
pid_t pid = fork();
if (pid == 0)
printf("child printing");
else
printf("parent printing");
}
Выход
term# ./a.out
Before forkingparent printingBefore forkingchild printing
Проблема выше ясно, что утверждение «Перед разветвлением», печатается дважды, где он должен быть напечатан только один раз.
Раствор
Использование '\n'
, в буфер каждую строку после каждого вызова printf()
.
Как правильно порекомендовали here позвонить fflush(0)
, чтобы освободить все буферы ввода/вывода перед разветвлением.
Что вы думаете? Вы пытались запустить его еще? –