C 等待不工作以同步三个进程
我是一个新的C开发人员。我正在尝试用以下代码同步三个进程以打印[父亲][儿子][孙子][父亲][儿子][孙子]:C 等待不工作以同步三个进程,c,unix,ipc,wait,C,Unix,Ipc,Wait,我是一个新的C开发人员。我正在尝试用以下代码同步三个进程以打印[父亲][儿子][孙子][父亲][儿子][孙子]: int main(int argc, char **argv) { int c = 0; while (c<2) { c++; printf("[FATHER]"); pid_t son = fork(); if (son == 0) { print
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);
};
}
相反,我得到的输出是:[父亲][儿子][孙子][父亲][儿子][父亲][父亲][儿子][孙子][父亲][父亲][儿子][父亲][父亲]
使用等待代码时,我是否误解或遗漏了什么?非常感谢。与每次调用printf后调用fflush不同,如果需要,最好先使用write系统调用打印到stdout,然后使用sprintf格式化输出字符串。write系统调用执行无缓冲写入,这将避免您每次都必须记住调用fflush
您甚至可以使用可变宏来避免总是先写入sprintf行,然后再写入行。尝试刷新流,fflush stdout,看看是否有帮助。或者像fprintf stderr,[FATHER];那样直接写入stderr;。K-ballo在每次打印后使用fflush后都能完美工作。非常感谢你!我会调查你的提议。TBH,我从未在C上使用过可变宏: