Переглядаючи сторінку чоловіка lstat (2), ви можете отримати натхнення на випадки, які можуть призвести до її помилки, якщо не помилки ENOENT (файл не існує.)
Найбільш очевидний:
У
дозволі на пошук EACCES відмовлено в одному з каталогів у префіксі шляху .
Тому вам потрібен каталог, з якого ви не можете шукати.
Так, ви можете шукати той, який вже є у вашій системі (можливо, /var/lib/private
якщо він існує?), Але ви також можете створити його самостійно, з еквівалентом:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Операція lstat (2) завершиться невдачею з тут EACCES. (Видалення всіх дозволів із каталогу гарантує це. Можливо, вам навіть цього не потрібно, і chmod -x
видалення дозволів на виконання буде достатньо, оскільки для доступу до файлів під ним потрібні дозволи на виконання каталогу.)
Є ще один креативний спосіб збити lstat (2) з ладу, переглянувши його довідкову сторінку:
ENOTDIR
- компонент префікса шляху шляху не є каталогом.
Отже, спроба отримати доступ до такого файлу, як /etc/passwd/nonexistent
слід викликати цю помилку, яка знову-таки відрізняється від ENOENT ("Немає такого файлу чи каталогу") і може відповідати вашим потребам.
Ще один:
Шлях ENAMETOOLONG занадто довгий.
Але для цього вам може знадобитися дійсно довге ім’я (я вважаю, 4 096 байт є типовим обмеженням, але ваша система / файлова система може мати довший.)
Нарешті, це важко сказати , є чи який - небудь з них буде на самому справі корисно для вас. Ви кажете, що хочете чогось, що не викликає сценарій "файл не існує". Хоча зазвичай це означає помилку ENOENT, на практиці багато перевірок вищого рівня просто інтерпретують будь-які помилки lstat (2) як "не існує". Наприклад, test -e
або еквівалент [ -e ...]
з оболонки може просто інтерпретувати все вищезазначене як "не існує", тим більше, що він не має хорошого способу повернути інше повідомлення про помилку, а не повернення помилки означало б, що файл існує, що, безумовно, не так.
/etc/shadow