gpt4 book ai didi

posix - 为什么存在 SIGPIPE?

转载 作者:行者123 更新时间:2023-12-03 04:59:51 25 4
gpt4 key购买 nike

根据我的理解,SIGPIPE 只能作为 write() 的结果发生,它可以(并且确实)返回 -1 并设置 errnoEPIPE...那么为什么我们会有额外的信号开销呢?每次我使用管道时,我都会忽略 SIGPIPE 并且从未因此感到任何疼痛,我是否错过了什么?

最佳答案

我不相信之前接受的答案。 SIGPIPE 恰好在 writeEPIPE 失败时生成,而不是提前生成 - 事实上,这是避免 SIGPIPE 的一种安全方法不更改全局信号配置的方法是使用 pthread_sigmask 暂时屏蔽它,执行 write,然后执行 sigtimedwait (零超时)以消耗任何挂起的信号SIGPIPE 信号(发送到调用线程,而不是进程),然后再次取消屏蔽。

我相信 SIGPIPE 存在的原因要简单得多:为连续读取输入、以某种方式转换它并写入输出的纯“过滤”程序建立合理的默认行为。如果没有 SIGPIPE,除非这些程序显式处理写入错误并立即退出(无论如何,这可能不是所有写入错误的理想行为),否则它们将继续运行,直到耗尽输入,即使它们的输出管道已关闭。当然,您可以通过显式检查 EPIPE 并退出来复制 SIGPIPE 的行为,但 SIGPIPE 的全部目的是默认实现此行为当程序员偷懒的时候。

关于posix - 为什么存在 SIGPIPE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8369506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com