Что означает код errno 20 (ENOTDIR)?

 
Также может означать:
КонстантаТипОС
ERROR_BAD_UNITОшибка WindowsWindows
KERN_INVALID_CAPABILITYКод возврата ядра macOSmacOS
ippStsNonIntelCpuСтатус Intel IPPЛюбая
CREATE_DELETE_LOCK_NOT_LOCKEDКод BSODWindows
Предыдущий Следующий
ENODEV EISDIR

ENOTDIR

Где остановилось разрешение пути

ENOTDIR точнее, чем «путь не найден». При разрешении пути каждый компонент до конечного имени должен быть каталогом или вести к каталогу. Если процесс пытается пройти через обычный файл, устройство или другой некаталожный объект, операция завершается ENOTDIR. Тот же результат возможен в API семейства *at, когда относительный путь передан вместе с дескриптором, не относящимся к каталогу.

Полезной подсказкой служит завершающий слэш: он явно требует, чтобы последний компонент был каталогом. Поэтому существующий обычный файл с таким именем всё равно способен вызвать ENOTDIR.

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

  • Разбейте записанный путь на компоненты и найдите первый объект, который не является каталогом.
  • Проверьте, не превратила ли переменная окружения, настройка или подстановка при развёртывании путь каталога в путь файла.
  • Для openat(), renameat() и похожих вызовов убедитесь, что переданный dirfd действителен и относится к каталогу.
  • Не маскируйте состояние созданием каталога, пока не установлено, какой тип объекта действительно ожидался.

Ссылки


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