Mirando la página del comando man lstat (2) puede inspirarse en casos que podrían hacer que falle con errores distintos a ENOENT (el archivo no existe).
La más obvia es:
EACCES
Se deniega el permiso de búsqueda para uno de los directorios en el prefijo de ruta de la ruta .
Por lo tanto, necesita un directorio desde el que no puede buscar.
Sí, puede buscar uno que ya esté en su sistema (¿tal vez /var/lib/private
si existe?) Pero también podría crear uno usted mismo, con el equivalente de:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
La operación lstat (2) fallará con EACCES aquí. (Eliminar todos los permisos del directorio garantiza eso. Tal vez ni siquiera necesite tanto y chmod -x
eliminar permisos de ejecución sería suficiente, ya que se necesitan permisos de ejecución en un directorio para acceder a los archivos que se encuentran debajo).
Hay otra forma creativa de hacer que lstat (2) falle, mirando su página de manual:
ENOTDIR
Un componente del prefijo de ruta de ruta no es un directorio.
Por lo tanto, intentar acceder a un archivo como /etc/passwd/nonexistent
debería desencadenar este error, que de nuevo es diferente de ENOENT ("No existe tal archivo o directorio") y podría satisfacer sus necesidades.
Otro es:
El
camino ENAMETOOLONG es demasiado largo.
Pero es posible que necesite un nombre realmente largo para este (creo que 4.096 bytes es el límite típico, pero su sistema / sistema de archivos podría tener uno más largo).
Finalmente, es difícil saber si alguno de estos será realmente útil para usted. Dices que quieres algo que no active el escenario "el archivo no existe". Aunque normalmente eso significa un error ENOENT, en la práctica muchas verificaciones de nivel superior simplemente interpretarán cualquier error de lstat (2) como "no existe". Por ejemplo, test -e
o el equivalente [ -e ...]
del shell podría simplemente interpretar todo lo anterior como "no existe", especialmente porque no tiene una buena manera de devolver un mensaje de error diferente y no devolver un error implicaría que el archivo existe, lo cual ciertamente no es el caso.
/etc/shadow