Patrząc na stronę podręcznika lstat (2) , możesz czerpać inspirację w przypadkach, które mogą sprawić, że zawiedzie z błędami innymi niż ENOENT (plik nie istnieje).
Najbardziej oczywistym z nich jest:
EACCES Brak
uprawnień do wyszukiwania dla jednego z katalogów w prefiksie ścieżki .
Potrzebujesz katalogu, z którego nie możesz wyszukiwać.
Tak, możesz poszukać takiego, który jest już w twoim systemie (być może, /var/lib/private
jeśli istnieje?) Ale równie dobrze możesz sam go stworzyć, z odpowiednikiem:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Operacja lstat (2) zakończy się tutaj niepowodzeniem z EACCES. (Usunięcie wszystkich uprawnień z katalogu to zapewnia. Może nawet nie potrzebujesz tak dużo ichmod -x
usunięcie uprawnień do wykonania byłoby wystarczające, ponieważ uprawnienia dostępu do katalogu są potrzebne, aby uzyskać dostęp do plików w nim zawartych).
Istnieje inny twórczy sposób, aby spowodować niepowodzenie lstat (2), patrząc na jego stronę podręcznika:
ENOTDIR
Składnik prefiksu ścieżki nie jest katalogiem.
Próbuję uzyskać dostęp do pliku takiego jak /etc/passwd/nonexistent
powinien wywołać ten błąd, który różni się od ENOENT („Brak takiego pliku lub katalogu”) i może odpowiadać Twoim potrzebom.
Kolejny to:
Ścieżka ENAMETOOLONG jest za długa.
Ale możesz potrzebować naprawdę długiej nazwy dla tego (uważam, że 4096 bajtów jest typowym limitem, ale twój system / system plików może mieć dłuższy).
Wreszcie, to trudno powiedzieć, czy któryś z nich będzie rzeczywiście przydatne dla Ciebie. Mówisz, że chcesz czegoś, co nie uruchamia scenariusza „plik nie istnieje”. Chociaż zazwyczaj oznacza to błąd ENOENT, w praktyce wiele kontroli wyższego poziomu po prostu interpretuje wszelkie błędy z lstat (2) jako „nieistniejące”. Na przykład test -e
lub odpowiednik [ -e ...]
powłoki może po prostu zinterpretować wszystkie powyższe jako „nie istnieje”, zwłaszcza że nie ma dobrego sposobu na zwrócenie innego komunikatu o błędzie, a brak zwrócenia błędu oznaczałby, że plik istnieje, co z pewnością nie jest prawdą.
/etc/shadow