Я пишу небольшую библиотеку, которая принимает указатель FILE * как входной.Должна ли моя библиотека обрабатывать SIGSEGV на вводе неправильного указателя?
Если я сразу же проверю этот указатель FILE * и найду, что он ведет к segfault, правильнее ли обрабатывать сигнал, устанавливать errno и изящно выйти; или ничего не делать и использовать обработчик обработчика вызывающего абонента, если он есть?
Преобладающая мудрость, кажется, «библиотеки никогда не должны вызывать аварии». Но я думаю, что, поскольку этот конкретный сигнал, безусловно, является ошибкой вызывающего, тогда я не должен пытаться скрывать эту информацию от него. У него может быть установлен собственный обработчик, чтобы реагировать на проблему по-своему. Та же самая информация может быть получена с помощью errno, но назначение по умолчанию для SIGSEGV было установлено по уважительной причине, и передача сигнала подтверждает эту философию либо заставляя вызывающего абонента обрабатывать его ошибки, либо путем сбоя и защиты от дальнейшего повреждения ,
Вы согласны с этим анализом или вы видите какую-то вескую причину для обращения к SIGSEGV в этой ситуации?
AFAIK standard C library не справляется с сбоем внутри, почему ваш lib должен? Однако я предполагаю, что это зависит от того, что вы планируете делать с вашей библиотекой. (Как проверка на FILE * приводит к SIGSEV btw? Просто любопытно) – BigMike