Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 等待不工作以同步三个进程_C_Unix_Ipc_Wait - Fatal编程技术网

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

我是一个新的C开发人员。我正在尝试用以下代码同步三个进程以打印[父亲][儿子][孙子][父亲][儿子][孙子]:

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上使用过可变宏: