0

我使用 C 和 python 程序创建了一个 fifo。fifo 是在 C 程序中创建的,它执行读取操作,而写入是在 Python 中完成的。我的问题如下:

  1. 如果我的读者(C 程序)被强行杀死,我的作者会继续写信给 fifo。我该如何处理这个问题,以便在读者被杀时作者退出?
  2. 当读者被杀死时,作者是否收到了 SIGPIPE 信号?
4

2 回答 2

0

当使用已失效的读取器写入管道时,写入器将收到 SIGPIPE 信号。默认情况下,这将终止该进程。如果忽略该信号,则写入将返回错误 EPIPE。无论读者如何死,这种情况都会发生。

于 2022-01-10T05:30:34.970 回答
0

因此,我在进一步测试中观察到以下内容:

  1. 当读取器进程被杀死时,写入器不会收到 SIGPIPE。
  2. 但是,当 reader 被杀死时,对 fifo 文件的 open 调用在 writer 端被阻止。因此,我目前通过在我的作者的公开电话中添加 O_NONBLOCK 标志解决了问题 1 的问题。添加后,如果 fifo 没有活动的读取器,则 open 调用会引发异常。谢谢!
于 2022-01-11T10:30:52.467 回答