Глядя на lstat (2)справочную страницу, вы можете получить некоторое представление о случаях, которые могут привести к сбою с ошибками, отличными от ENOENT (файл не существует.)
Самый очевидный из них:
EACCES Search permission is denied for one of the directories in the path prefix of path.
Итак, вам нужен каталог, в котором вы не можете выполнять поиск.
Да, вы можете найти тот, который уже есть в вашей системе (возможно /var/lib/private
, если он существует? )Но вы также можете создать его самостоятельно с эквивалентом:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Операция lstat (2 )завершится с ошибкой EACCES. (Удаление всех разрешений для каталога гарантирует это. Возможно, вам даже не нужно так много, и chmod -x
удаления разрешений на выполнение будет достаточно, поскольку разрешения на выполнение в каталоге необходимы для доступа к файлам в нем.)
Есть еще один творческий способ сделать lstat (2 )неработоспособным, взглянув на его справочную страницу:
ENOTDIR A component of the path prefix of path is not a directory.
Таким образом, попытка доступа к такому файлу, как /etc/passwd/nonexistent
, должна вызвать эту ошибку, которая опять же отличается от ENOENT («Нет такого файла или каталога» )и может соответствовать вашим потребностям.
Другой:
ENAMETOOLONG path is too long.
Но вам может понадобиться очень длинное имя для этого. (Я полагаю, что 4096 байт — это обычное ограничение, но ваша система/файловая система может иметь более длинное имя.)
Наконец, трудно сказать, будет ли какое-либо из них действительно полезным для вас. Вы говорите, что хотите что-то, что не запускает сценарий «файл не существует». Хотя обычно это означает ошибку ENOENT, на практике многие проверки более высокого уровня -просто интерпретируют любые ошибки из lstat (2 )как «не существует».Например, test -e
или эквивалент [ -e...]
из оболочки могут просто интерпретировать все вышеперечисленное как «не существует», тем более что у него нет хорошего способа вернуть другое сообщение об ошибке и не возвращать ошибку. будет означать, что файл существует, что, безусловно, не так.