我正在使用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阻止,以便服务器在某些客户端发送消息后就可以接收任何消息。

最佳答案

您可以简单地重试读取。例如

int iResult;

do
{
    iResult = read(fd, buffer, size);
    if (0 == iResult)
    {
           // Skip to the end of the do loop
            continue;
    }
        // Handle real errors
} while (!condition);

关于c++ - 阅读fifo:为什么阻止然后非阻止,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41088173/

10-16 18:26