在FIFO之间连续读写行为

时间:2017-04-25 19:28:37

标签: c mkfifo

我已经编写了以下2个程序,其中一个我不断地将一个字符串写入一个缓冲区并将其通过FIFO传递给另一个,它读取我已经传递的内容。

/*write*/
int main()
{
    int i=0, fd1;
    char buffer[16];

    mkfifo("fifo1", 0666);

    fd1 = open("fifo1", O_WRONLY);

    for(;;)
    {
        sprintf(buffer, "string%d", i);
        write(fd1, buffer, 16);
        i++;
    }
}

/*read*/
int main()
{
    int i=0, fd1;
    char buffer[16];

    fd1 = open("fifo1", O_RDONLY);

    for(;;)
    {
        sleep(1);
        read(fd1, buffer, 16);
        printf("%s\n", buffer);
    }
}

所以,我想分析这两个程序之间的行为。我打开了2个终端。在第一个中,我先运行写程序,然后在第二个运行读程序。看到读取程序打印了一些字符串后,我停止了执行写程序(通过键盘),检查发生了什么。即使我已停止写程序,读取程序仍保持打印字符串。

有人可以向我解释这两个程序的行为吗?究竟发生了什么?

(我没有费心写函数检查)

0 个答案:

没有答案