【发布时间】:2012-02-17 03:45:36
【问题描述】:
我正在编写一个以 FILE * 指针作为输入的小型库。
如果我立即检查这个 FILE * 指针并发现它导致了段错误,那么处理信号、设置 errno 并优雅退出是否更正确;还是什么都不做,使用调用者安装的信号处理程序(如果有的话)?
流行的智慧似乎是“图书馆不应该导致崩溃”。但我的想法是,既然这个特定的信号肯定是调用者的错,那么我不应该试图向他隐藏那个信息。他可能安装了自己的处理程序,以自己的方式对问题做出反应。可以使用 errno 检索相同的信息,但设置 SIGSEGV 的默认处置是有充分理由的,并且通过强制调用者处理他的错误,或通过崩溃并保护他免受进一步损害,向上传递信号尊重这一理念.
您是否同意这种分析,或者您认为在这种情况下处理 SIGSEGV 有什么令人信服的理由?
【问题讨论】:
-
AFAIK 标准 C 库不处理内部崩溃,为什么你的库应该?但是我想这取决于你打算用你的库做什么。 (对 FILE * 的检查如何导致 SIGSEV 顺便说一句?只是好奇)
标签: c error-handling shared-libraries signals errno