Что означает код errno 19 (ENODEV)?

 
Также может означать:
КонстантаТипОС
ERROR_WRITE_PROTECTОшибка WindowsWindows
KERN_UREFS_OVERFLOWКод возврата ядра macOSmacOS
ippStsDomainСтатус Intel IPPЛюбая
EMPTY_THREAD_REAPER_LISTКод BSODWindows
Предыдущий Следующий
EXDEV ENOTDIR

ENODEV

Это не обязательно отключённое устройство

ENODEV обозначает отсутствующую или непригодную возможность, похожую на устройство, но точный объект определяется вызовом. Например, Linux mmap() может вернуть ENODEV, когда файловая система за файлом не поддерживает отображение в память. Linux pidfd_open() использует тот же код, если в ядре отсутствует файловая система анонимных inode, необходимая для создания PID-дескриптора.

Поэтому ENODEV говорит о возможности, а не доказывает опечатку в пути. Для open() специального файла устройства Linux документирует отсутствие устройства как ENXIO и отмечает, что ENODEV в таком месте является ошибкой ядра. Различие нужно понимать по конкретному API, типу объекта и платформе, а не только по имени константы.

Как расследовать

  • Запишите функцию, путь или дескриптор, флаги, тип объекта и, когда применимо, major/minor устройства или тип файловой системы.
  • Для узла устройства убедитесь, что он связан с нужным устройством и драйвером; повторное создание файла с тем же именем не делает отсутствующее устройство доступным.
  • При отображении файла проверьте поддержку mmap целевой файловой системой и переходите к другому способу ввода-вывода только если это допускает архитектура приложения.
  • Для необязательных возможностей ядра предусмотрите проверку capability или явный путь «не поддерживается», а не слепой повтор запроса.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.