Глядя на справочную страницу 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
путь слишком длинный.
Но вам может понадобиться действительно длинное имя для этого (я думаю, что 4096 байт - это типичное ограничение, но ваша система / файловая система может иметь более длинное имя).
Наконец, трудно сказать, будет ли что-нибудь из этого действительно полезным для вас. Вы говорите, что хотите что-то, что не вызывает сценарий «файл не существует». Хотя обычно это означает ошибку ENOENT, на практике многие проверки более высокого уровня будут просто интерпретировать любые ошибки из lstat (2) как «не существует». Например, test -e
или эквивалент [ -e ...]
из оболочки может просто интерпретировать все вышеперечисленное как «не существует», тем более что у него нет хорошего способа вернуть другое сообщение об ошибке, и не возвращая ошибку, можно предположить, что файл существует, что, безусловно, не так.
/etc/shadow