En consultant la page de manuel lstat (2) , vous pouvez vous inspirer des cas susceptibles de provoquer l'échec avec des erreurs autres que ENOENT (le fichier n'existe pas.)
Le plus évident est:
EACCES L'
autorisation de recherche est refusée pour l'un des répertoires du préfixe de chemin d' accès path .
Vous avez donc besoin d'un répertoire que vous ne pouvez pas rechercher.
Oui, vous pouvez en chercher un qui est déjà dans votre système (peut /var/lib/private
- être s'il existe?) Mais vous pourriez aussi bien en créer un vous-même, avec l'équivalent de:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
L'opération lstat (2) échouera avec EACCES ici. (La suppression de toutes les autorisations du répertoire garantit cela. Peut-être que vous n'en avez même pas besoin et la chmod -x
suppression des autorisations d'exécution serait suffisante, car les autorisations d'exécution sur un répertoire sont nécessaires pour accéder aux fichiers qu'il contient.)
Il existe une autre façon créative de faire échouer lstat (2), en regardant sa page de manuel:
ENOTDIR
Un composant du préfixe de chemin d' accès de chemin d' accès n'est pas un répertoire.
Donc, essayer d'accéder à un fichier tel que /etc/passwd/nonexistent
devrait déclencher cette erreur, qui est encore différente de ENOENT ("Aucun fichier ou répertoire") et pourrait répondre à vos besoins.
Un autre est:
Le
chemin ENAMETOOLONG est trop long.
Mais vous pourriez avoir besoin d'un nom très long pour celui-ci (je pense que 4 096 octets est la limite typique, mais votre système / système de fichiers peut en avoir un plus long.)
Enfin, il est difficile de dire si l'un de ces éléments vous sera réellement utile. Vous dites que vous voulez quelque chose qui ne déclenche pas le scénario "le fichier n'existe pas". Bien que cela signifie généralement une erreur ENOENT, dans la pratique, de nombreuses vérifications de niveau supérieur interpréteront simplement les erreurs de lstat (2) comme «n'existe pas». Par exemple, test -e
ou l'équivalent [ -e ...]
du shell pourrait simplement interpréter tout ce qui précède comme "n'existe pas", d'autant plus qu'il n'a pas un bon moyen de renvoyer un message d'erreur différent et ne pas renvoyer une erreur impliquerait que le fichier existe, ce qui n'est certainement pas le cas.
/etc/shadow