【问题标题】:read from pipe is blocking从管道读取被阻塞
【发布时间】:2011-11-15 04:05:29
【问题描述】:

我正在从管道读取未知数量的消息。但是,读取是阻塞的。我尝试使用以下代码将读取设置为非阻塞。但是,这会导致读取错误和进程无法一直读取。

// 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);

【问题讨论】:

  • 阅读 select、poll 和 epoll 的文档。
  • 您遇到什么错误?当没有可读取的内容时,非阻塞套接字将始终返回“读取错误”。
  • @ZanLynx 没错。当启动足够的进程时。几个进程将退出并出现读取错误。

标签: linux unix ipc pipe


【解决方案1】:

使用 select() 或 epoll()。这是在没有多线程的情况下实现非阻塞读取(或写入)的标准方法。

【讨论】:

  • 你能给我举个例子吗?
  • 阅读数百篇关于 select() 的教程之一。
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 2011-06-30
  • 2016-08-09
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多