| Предыдущий | Следующий |
| ENODEV | EISDIR |
ENOTDIR
Где остановилось разрешение пути
ENOTDIR точнее, чем «путь не найден». При разрешении пути каждый компонент до конечного имени должен быть каталогом или вести к каталогу. Если процесс пытается пройти через обычный файл, устройство или другой некаталожный объект, операция завершается ENOTDIR. Тот же результат возможен в API семейства *at, когда относительный путь передан вместе с дескриптором, не относящимся к каталогу.
Полезной подсказкой служит завершающий слэш: он явно требует, чтобы последний компонент был каталогом. Поэтому существующий обычный файл с таким именем всё равно способен вызвать ENOTDIR.
Как расследовать
- Разбейте записанный путь на компоненты и найдите первый объект, который не является каталогом.
- Проверьте, не превратила ли переменная окружения, настройка или подстановка при развёртывании путь каталога в путь файла.
- Для
openat(),renameat()и похожих вызовов убедитесь, что переданныйdirfdдействителен и относится к каталогу. - Не маскируйте состояние созданием каталога, пока не установлено, какой тип объекта действительно ожидался.
Ссылки
Нужно найти другой код? Найти другой код состояния или ошибки.
