Looking at the lstat (2) pagina man puoi trarre ispirazione dai casi che potrebbero far fallire con errori diversi da ENOENT (il file non esiste.)
Il più ovvio è:
L'
autorizzazione di ricerca EACCES è negata per una delle directory nel prefisso del percorso .
Quindi hai bisogno di una directory da cui non puoi cercare.
Sì, puoi cercarne uno già nel tuo sistema (forse /var/lib/private
se esiste?) Ma potresti anche crearne uno tu stesso, con l'equivalente di:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
L'operazione lstat (2) fallirà con EACCES qui. (La rimozione di tutte le autorizzazioni dalla directory lo assicura. Forse non ne hai nemmeno bisogno e chmod -x
rimuovere le autorizzazioni di esecuzione sarebbe sufficiente, poiché per accedere ai file in essa contenuti sono necessarie le autorizzazioni di esecuzione su una directory.)
C'è un altro modo creativo per far fallire lstat (2), guardando la sua pagina man:
ENOTDIR
Un componente del prefisso percorso di percorso non è una directory.
Quindi, tentare di accedere a un file come quello /etc/passwd/nonexistent
dovrebbe innescare questo errore, che è di nuovo diverso da ENOENT ("Nessun file o directory") e potrebbe soddisfare le tue esigenze.
Un altro è:
Il
percorso ENAMETOOLONG è troppo lungo.
Ma potresti aver bisogno di un nome davvero lungo per questo (credo che 4.096 byte sia il limite tipico, ma il tuo sistema / filesystem potrebbe averne uno più lungo).
Infine, è difficile dire se qualcuno di questi sarà effettivamente utile per te. Dici di voler qualcosa che non inneschi lo scenario "il file non esiste". Sebbene in genere ciò significhi un errore ENOENT, in pratica molti controlli di livello superiore interpreteranno semplicemente qualsiasi errore di lstat (2) come "non esiste". Ad esempio test -e
o l'equivalente [ -e ...]
della shell potrebbe semplicemente interpretare tutto quanto sopra come "non esiste", soprattutto perché non ha un buon modo per restituire un messaggio di errore diverso e non restituire un errore implicherebbe che il file esiste, che certamente non è il caso.
/etc/shadow