【发布时间】:2015-02-04 07:08:27
【问题描述】:
作者有什么方法可以知道读者已经关闭了命名管道的末端(或退出),没有写入它?
我需要知道这一点,因为我写入管道的初始数据不同;读者期望在其余数据到来之前有一个初始标题。
目前,当我的write() 以EPIPE 失败时,我会检测到这一点。然后我设置了一个标志,上面写着“下一次,发送标题”。但是,读者可以在我写任何东西之前关闭并重新打开管道。在这种情况下,我从来没有意识到他做了什么,也没有发送他期望的标题。
这里有什么异步事件类型的东西可以提供帮助吗?我没有看到任何信号正在发送。
请注意,我没有包含任何语言标签,因为这个问题应该被认为与语言无关。我的代码是 Python,但答案应该适用于 C 或任何其他具有系统调用级绑定的语言。
【问题讨论】:
-
男人 2 写:
EPIPEfd is connected to a pipe or socket whose reading end is closed. When this happens the writing process will also receive a SIG‐ PIPE signal. (Thus, the write return value is seen only if the program catches, blocks or ignores this signal.) -
有什么理由不定期发送标头数据?如果读者可以处理它们,也许它可以处理冗余标题?
-
@wildplasser 我不确定你现在的意思。是的,当我尝试写入时,我知道管道已关闭。我的问题是问如何在不写入的情况下异步检测到这一点。
-
@wallyk 这不是一个选项。在这种情况下,管道的另一端是 Wireshark,它期待 pcap 数据。初始标头告诉 Wireshark 数据类型,而其余数据是数据包。
标签: linux named-pipes