我是一个新的C dev。我正在尝试使用以下代码同步三个进程来打印[父亲] [SON] [GRANDSON] [父亲] [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);
};
}
相反,我得到这个输出:[父亲] [SON] [GRANDSON] [父亲] [SON] [父亲] [父亲] [SON] [GRANDSON] [父亲] [父亲] [SON] [父亲] [ FATHER]
在使用代码等待时,我是否误解或遗漏了某些内容?非常感谢你。
答案 0 :(得分:0)
不是在每次调用fflush
后调用printf
,而是使用write
系统调用打印到stdout
(格式化输出字符串)会更好必要时首先使用sprintf
。 write
系统调用执行无缓冲写入操作,这会阻止您每次都记住调用fflush
。
您甚至可以使用可变参数宏来避免始终写入sprintf
行后跟write
行。