我已经编写了以下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个终端。在第一个中,我先运行写程序,然后在第二个运行读程序。看到读取程序打印了一些字符串后,我停止了执行写程序(通过键盘),检查发生了什么。即使我已停止写程序,读取程序仍保持打印字符串。
有人可以向我解释这两个程序的行为吗?究竟发生了什么?
(我没有费心写函数检查)