setbuf无法在多进程中工作的问题

时间:2019-05-31 07:33:24

标签: c linux buffering multiprocess

如以下代码所示, 我使用fork函数创建一个子进程,删除stdout的缓冲区,并创建竞争条件环境, 但是这两个过程没有竞争。

系统:Linux user1-ubuntu64 4.18.0-20-generic 编译器:gcc版本7.4.0(Ubuntu 7.4.0-1ubuntu1〜18.04) 编译命令:gcc -o test test.c

如果给父进程一个很小的延迟(250ns),我想要的工作。

源代码:

#include <stdio.h>
#include <sys/types.h>

static void printatime(char *);

int main(void)
{
    pid_t pid;

    if ((pid = fork()) < 0)
    {
        perror("fork error");
        return -1;
    }
    else if (pid == 0)
    {
        printatime("AAAAAAAAAAAA");
    }
    else
    {
        printatime("BBBBBBBBBBBB");
    }
    return 0;
}

static void printatime(char *str)
{
    char *ptr = str;
    setbuf(stdout, NULL);
    while (*ptr)
    {
        putc(*ptr++, stdout);
    }
}

预期结果:

user@ubuntu64:~/C$ BAABBABABAABBAAABBABABAB

实际结果:

BBBBBBBBBBBBuser@ubuntu64:~/C$ AAAAAAAAAAAA

0 个答案:

没有答案