Справочная страница Linux , на которую ссылается vy32, прямо указывает, что SIGSEGV
генерируется при ошибке записи (например, нет места на диске), но неясно, генерируют ли ошибки чтения такие ошибки (например, когда съемный носитель имеет были физически удалены). Википедия представляется более конкретной на этом:
Ошибки ввода-вывода в базовом файле (например, его съемный диск отключен или оптический носитель извлечен, диск заполнен при записи и т. Д.) При обращении к его отображенной памяти сообщаются приложению как сигналы SIGSEGV / SIGBUS в POSIX и структурированное исключение EXECUTE_IN_PAGE_ERROR в Windows. Весь код, обращающийся к отображенной памяти, должен быть подготовлен к обработке этих ошибок, которые обычно не возникают при обращении к памяти.
Спецификация POSIX mmap
не требует доставки сигнала по ошибке, но оставляет такую возможность для реализаций:
Реализация может генерировать сигналы SIGBUS, когда ссылка вызовет ошибку в отображаемом объекте, такую как состояние вне пространства.