我正在从管道中读取未知数量的消息。但是,读取是阻止的。我已经尝试了以下代码将读取设置为非阻塞。但是,这导致读取错误和进程无法完全读取。
// Set pipe to non-blocking
sleep(5);
fcntl(fd[index][0], F_SETFL, O_NONBLOCK);
如果程序没有挂起,如何成功阅读和打印所有邮件? 以下是导致问题的代码:
// Read every message
while((n = read(fd[index][0], &mymsg, sizeof(int))) == sizeof(int))
printf("process%d has received a message from process%d\n", index, mymsg);
答案 0 :(得分:1)
使用select()或epoll()。这是在没有多线程的情况下实现非阻塞读取(或写入)的标准方法。