我使用FIFO使两个进程进行通信。
读FIFO:为什么会阻塞然后非阻塞
//client:
const char * msg = "Hello, I'm cleint1.";
const char * fifoName = "../server/fifo.tmp";
int fd = open(fifoName, O_WRONLY);
write(fd, msg, strlen(msg) + 1);
close(fd);
//server:
char msg[100];
const char * fifoName = "fifo.tmp";
mkfifo(fifoName, 0666);
int fd = open(fifoName, O_RDONLY);
while(read(fd, msg, 100) > 0)
{
std::cout<<"msg received: "<<msg<<std::endl;
}
close(fd);
unlink(fifoName);
服务器将首先阻塞在那里等待一些消息在fifoName
。当一些消息到达时(客户端执行),服务器读取它们,然后循环结束。
我现在很困惑。因为我不知道为什么服务器第一次调用read
并且它在那里阻塞,而当它再次调用read
并且它不再阻塞时。
我打印的read
返回值和我收到的第一条消息后,得到0。
我需要的是使read
每次都被阻塞,以便服务器可以在某个客户端发送消息后立即收到任何消息。
应打印字符串错误(错误),看看是什么错误。 –
@SumitGemini,我打印'read'的回报,我得到0. – Yves
所以你想让你的服务器无限运行?连续阅读? –