多向管道问题(父亲<->儿子)

时间:2018-09-05 00:57:22

标签: c pipe fork

我的小程序包括两个管道,用于在父子之间建立多向通信。

在s2f [1]上的写入返回-1,但我不明白为什么。

你能帮我吗?还有其他不起作用或我可以改善的东西吗?

Stateless

1 个答案:

答案 0 :(得分:2)

在写入之前,您已经关闭了管道s2f的读取端。

close(s2f[0]);

因此,当您写入管道时,将出现EPIPE错误。来自write上的online参考(重点突出):

  

fd连接到读取端关闭的管道或插座时,会发生EPIPE错误。发生这种情况时,写入过程还将收到SIGPIPE信号。 (因此,仅当程序捕获,阻止或忽略此信号时,才会看到写返回值。。)

由于您的程序没有捕获,阻止或忽略此信号,因此写返回值不是预期的,而是-1。