C语言 APUE:如何在两个过程中交替打印某些内容


#include<apue.h>
#include<signal.h>
static void charatatime(char *str)
{
    char *ptr;
    int c;
    setbuf(stdout,NULL);
    for (ptr = str;(c = *ptr++) != 0;)
        putc(c,stdout);
}
int main(int argc , char *argv[])
{
    pid_t   pid;
    int i;
    TELL_WAIT();
    if ((pid = fork()) < 0)
        err_sys("fork error");
    else if (pid == 0)
    {
        for (i = 0;i < 10;++i)
        {
            WAIT_PARENT();
            charatatime("ouput from childn");
        }
        exit(0);
    }
    else
    {
        for (i = 0;i < 10;++i)
        {
            charatatime("output from parentn");
            TELL_CHILD(pid);
        }
    }
    return 0;
}

它通过仅打印两次而没有任何循环来正常工作,但是当我尝试使用循环打印更多次for......我认为父进程应该在完成后等待子进程TELL_CHILD(pid)....

你的问题是在写入后,父母不会等待孩子接管。因此,您的代码仅确保子级在父级至少写入一次后写入。

我无法测试代码,因此请检查错误,但也许这样的事情会起作用:

#include<apue.h>
#include<signal.h>
static void charatatime(char *str)
{
    char *ptr;
    int c;
    setbuf(stdout,NULL);
    for (ptr = str;(c = *ptr++) != 0;)
        putc(c,stdout);
}
int main(int argc , char *argv[])
{
    pid_t   pid;
    int i;
    TELL_WAIT();
    if ((pid = fork()) < 0)
        err_sys("fork error");
    else if (pid == 0)
    {
        TELL_PARENT();
        for (i = 0;i < 10;++i)
        {
            WAIT_PARENT();
            charatatime("ouput from childn");
            TELL_PARENT();
        }
        exit(0);
    }
    else
    {
        for (i = 0;i < 10;++i)
        {
            WAIT_CHILD(pid);
            charatatime("output from parentn");
            TELL_CHILD(pid);
        }
    }
    return 0;
}

最新更新