我的小程序包括两个管道,用于在父子之间建立多向通信。
在s2f [1]上的写入返回-1,但我不明白为什么。
你能帮我吗?还有其他不起作用或我可以改善的东西吗?
Stateless
答案 0 :(得分:2)
在写入之前,您已经关闭了管道s2f
的读取端。
close(s2f[0]);
因此,当您写入管道时,将出现EPIPE
错误。来自write
上的online参考(重点突出):
fd连接到读取端关闭的管道或插座时,会发生EPIPE错误。发生这种情况时,写入过程还将收到SIGPIPE信号。 (因此,仅当程序捕获,阻止或忽略此信号时,才会看到写返回值。。)
由于您的程序没有捕获,阻止或忽略此信号,因此写返回值不是预期的,而是-1。