通过调用signal()忽略SIGPIPE后,write()调用可能会失败,并且errno设置为等于EPIPE。我是否仍然需要关闭文件描述符,如下例所示?
<p>Here's my date data {{ data.date | myCustomPipe}}</p>
答案 0 :(得分:2)
请记住,在创建管道时,使用相同名称的系统调用,您将获得两个文件描述符:一个用于读取,一个用于写入。当读取 fd关闭时,在写入fd上从写入操作获得EPIPE。写fd仍然是开放的。如果你再次尝试写信,你会再次获得EPIPE。
(通常,当发生这种情况时,管道是由shell或其他一些父进程设置的,并且读取的fd从未对您的程序可用,但这对内核无关紧要。它在< em> some process(es),现在不是。)
由于它仍处于打开状态,您需要关闭它。但是,退出会自动关闭所有仍处于打开状态的fds。因此,如果关闭管道后你要做的下一件事就是退出,那么你不需要先打扰它。由于它是一个管道,并且您已经有EPIPE,因此close
可能无法报告任何延迟写入错误。
答案 1 :(得分:0)
您始终必须关闭文件描述符。不,不,但没有。