| Предыдущий | Следующий |
| EXDEV | ENOTDIR |
ENODEV
Это не обязательно отключённое устройство
ENODEV обозначает отсутствующую или непригодную возможность, похожую на устройство, но точный объект определяется вызовом. Например, Linux mmap() может вернуть ENODEV, когда файловая система за файлом не поддерживает отображение в память. Linux pidfd_open() использует тот же код, если в ядре отсутствует файловая система анонимных inode, необходимая для создания PID-дескриптора.
Поэтому ENODEV говорит о возможности, а не доказывает опечатку в пути. Для open() специального файла устройства Linux документирует отсутствие устройства как ENXIO и отмечает, что ENODEV в таком месте является ошибкой ядра. Различие нужно понимать по конкретному API, типу объекта и платформе, а не только по имени константы.
Как расследовать
- Запишите функцию, путь или дескриптор, флаги, тип объекта и, когда применимо, major/minor устройства или тип файловой системы.
- Для узла устройства убедитесь, что он связан с нужным устройством и драйвером; повторное создание файла с тем же именем не делает отсутствующее устройство доступным.
- При отображении файла проверьте поддержку mmap целевой файловой системой и переходите к другому способу ввода-вывода только если это допускает архитектура приложения.
- Для необязательных возможностей ядра предусмотрите проверку capability или явный путь «не поддерживается», а не слепой повтор запроса.
Ссылки
- Руководство Linux: errno(3)
- Руководство Linux: mmap(2)
- Руководство Linux: open(2)
- Руководство Linux: pidfd_open(2)
Нужно найти другой код? Найти другой код состояния или ошибки.