您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

什么条件导致打开的,无阻塞的命名管道(fifo)对于读取“不可用”?

什么条件导致打开的,无阻塞的命名管道(fifo)对于读取“不可用”?

系统调用POSIX规范read(强调我的):

尝试从空管道或FIFO中读取时:

如果没有进程打开要写入的管道,则read()应返回0表示文件结束。

所以基本上您的第二个假设是错误的:

如果编写器打开了管道,但FIFO中没有数据,则还返回空的str(’‘)

这将违反规范,并且我无法在我的机器上重现该行为(这EAGAIN对我来说很有意义)。这不是什么大问题,但是,您可以捕获异常并重试:

import errno

def safe_read(fd, size=1024):
   ''' reads data from a pipe and returns `None` on EAGAIN '''
   try:
      return os.read(fd, size)
   except OSError, exc:
      if exc.errno == errno.EAGAIN:
         return None
      raise
其他 2022/1/1 18:16:49 有602人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶