【发布时间】:2015-03-20 18:41:16
【问题描述】:
我正在学习 Linux 中的管道编程,但无法理解管道/FIFO 管理。
我编写了一个小程序,它打开了我创建的 FIFO(在执行程序之前,我在终端中执行了mkfifo newfifo)。然后我反复读取并转储我的字符缓冲区。我正在使用来自另一个终端的 cmd 行的 echo "message" > newfifo 填充 FIFO。
问题是,当我写入 FIFO 时,我可以读取缓冲区中的数据,但随后读取不再阻塞。我的理解是,在我从 FIFO 中读取数据后,FIFO 应该是空的,并且读取应该阻塞。我是在想这个错误,还是我对 FIFO 的管理不正确?
代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/types.h>
#define NEWPIPE "./newfifo"
void main()
{
int great_success = 0;
int fd;
char buffer[20];
fd = open(NEWPIPE, O_RDONLY);
while (1) {
great_success = read(fd, buffer, 20);
if (great_success < 0) {
printf("pipe failed\n");
} else {
printf("buffer : %s\n", buffer);
printf("great_success = %d\n", great_success);
great_success = 0;
}
}
}
【问题讨论】: