加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 检测读取器何时关闭命名管道(FIFO)

发布时间:2020-12-13 17:00:04 所属栏目:Linux 来源:网络整理
导读:有没有办法让作者知道读者已经关闭了命名管道(或退出)的末尾而没有写入它? 我需要知道这一点,因为我写入管道的初始数据是不同的;读者期望在其余数据到来之前有一个初始标题. 目前,当我的write()因EPIPE失败时,我会检测到这一点.然后我设置了一个标志,上面写
有没有办法让作者知道读者已经关闭了命名管道(或退出)的末尾而没有写入它?

我需要知道这一点,因为我写入管道的初始数据是不同的;读者期望在其余数据到来之前有一个初始标题.

目前,当我的write()因EPIPE失败时,我会检测到这一点.然后我设置了一个标志,上面写着“下次发送标题”.但是,在我写任何东西之前,读者可以关闭并重新打开管道.在这种情况下,我从来没有意识到他做了什么,也没有发送他期待的标题.

是否存在任何类型的异步事件类型可能对此有所帮助?我没有看到任何信号被发送.

请注意,我没有包含任何语言标记,因为这个问题应该被视为与语言无关.我的代码是Python,但答案应该适用于C或任何其他具有系统调用级绑定的语言.

解决方法

如果您使用的是基于轮询系统调用的事件循环,则可以使用包含EPOLLERR的事件掩码注册管道.在Python中,使用select.poll,
import select
fd = open("pipe","w")
poller = select.poll()
poller.register(fd,select.POLLERR)
poller.poll()

将等到管道关闭.

要对此进行测试,请运行mkfifo pipe,启动脚本,然后在另一个终端运行中运行,例如cat pipe.一旦退出cat进程,脚本将终止.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读