一个写入者如何知道读取者已关闭或退出命名管道的末端,而不写入它?
我需要知道这个,因为我写入管道的初始数据是不同的。读取者在其余数据到来之前期望一个初始头文件。
目前,当我的
是否有任何类型的异步事件可以帮助解决这个问题?我没有看到任何信号被发送。 请注意,我没有包括任何语言标签,因为这个问题应该被认为是与语言无关的。我的代码是Python,但答案应该适用于C或任何其他具有系统调用级别绑定的语言。
我需要知道这个,因为我写入管道的初始数据是不同的。读取者在其余数据到来之前期望一个初始头文件。
目前,当我的
write()
失败,并返回错误码EPIPE
时,我检测到了这一点。然后我设置一个标志表示“下次发送头文件”。但是,读取者在我写入任何内容之前可能会关闭并重新打开管道。在这种情况下,我永远不会意识到他所做的事情,并且不会发送他期望的头文件。是否有任何类型的异步事件可以帮助解决这个问题?我没有看到任何信号被发送。 请注意,我没有包括任何语言标签,因为这个问题应该被认为是与语言无关的。我的代码是Python,但答案应该适用于C或任何其他具有系统调用级别绑定的语言。
man 2 write:
EPIPE
fd连接到一个读端已关闭的管道或套接字。 当出现这种情况时,写入进程也将收到SIGPIPE信号。 (因此,仅当程序捕获、阻塞或忽略此信号时,才会看到写入返回值。)
- wildplasser