【发布时间】:2011-09-12 00:56:52
【问题描述】:
我是一个新的 C 开发者。我正在尝试使用以下代码同步三个进程以打印 [FATHER][SON][GRANDSON][FATHER][SON][GRANDSON]:
int main(int argc, char **argv)
{
int c = 0;
while (c<2)
{
c++;
printf("[FATHER]");
pid_t son = fork();
if (son == 0)
{
printf("[SON]");
pid_t grandson = fork();
if (grandson == 0)
{
printf("[GRANDSON]");
return 0;
}
wait(NULL);
return 0;
}
wait(NULL);
};
}
相反,我得到这个输出:[父亲][儿子][孙][父亲][儿子][父亲][父亲][儿子][孙][父亲][父亲][儿子][父亲][父亲]
我在使用等待代码时是否误解或遗漏了什么?非常感谢。
【问题讨论】:
-
尝试刷新流,
fflush( stdout ),看看是否有帮助。 -
或者像
fprintf (stderr, "[FATHER]");一样直接写到stderr。 -
K-ballo 在每次 printf 后使用 fflush 后效果都很好。非常感谢!