Fonction validant l'existant d'un chemin d'accès en C
tranduil
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je cherche une fonction en C qui me permet de définir si un chemin d'accès passé en paramètre existe.
Je suis limité à l'usage de ces fonctions:
write, opendir, readdir, closedir, stat, lstat, getpwuid, getgrgid, listxattr, getxattr, time, ctime, readlink, malloc, free, perror, strerror et enfin exit.
Je cherche comme je peux mais je ne trouve pas quelle fonction me permet de faire ce que je veux et je ne suis pas sur qu'il y en ait une. Et après de nombreuses recherches, je sait comment faire ce test dans a peu près tout les langages connu mais toujours pas en C (>_<) fichu web..
Si vous trouvez un moyen détourné de faire la vérification de l'existence d'un chemin d'accès, je serais tout aussi satisfait que si vous me disiez quelle fonction sert à faire ce test.
Je cherche une fonction en C qui me permet de définir si un chemin d'accès passé en paramètre existe.
Je suis limité à l'usage de ces fonctions:
write, opendir, readdir, closedir, stat, lstat, getpwuid, getgrgid, listxattr, getxattr, time, ctime, readlink, malloc, free, perror, strerror et enfin exit.
Je cherche comme je peux mais je ne trouve pas quelle fonction me permet de faire ce que je veux et je ne suis pas sur qu'il y en ait une. Et après de nombreuses recherches, je sait comment faire ce test dans a peu près tout les langages connu mais toujours pas en C (>_<) fichu web..
Si vous trouvez un moyen détourné de faire la vérification de l'existence d'un chemin d'accès, je serais tout aussi satisfait que si vous me disiez quelle fonction sert à faire ce test.
A voir également:
- Fonction validant l'existant d'un chemin d'accès en C
- Fonction si et - Guide
- Acces rapide - Guide
- Accès refusé - Guide
- Trousseau d'accès iphone - Guide
- Fonction filtre excel n'existe pas - Forum Excel
4 réponses
Bonjour tranduil,
Les fonctions que tu mentionnes sont des fonctions C POSIX.
Sur un système POSIX, tu as des pages de manuel, que tu peux afficher en ligne de commande en tapant "man", un espace et la commande sur laquelle tu cherches à te documenter.
par exemple :
C'est ta documentation de base pour comprendre ce que font tes fonctions.
Tu trouves de la doc en ligne aussi, par exemple :
https://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html (standard POSIX)
https://linux.die.net/man/2/stat (un des nombreux sites qui reproduisent des pages de manuel Linux sur le Web)
C'est pour un exercice, une devinette, un pari, un gage ?
Dal
Les fonctions que tu mentionnes sont des fonctions C POSIX.
Sur un système POSIX, tu as des pages de manuel, que tu peux afficher en ligne de commande en tapant "man", un espace et la commande sur laquelle tu cherches à te documenter.
par exemple :
man stat, et tu appuies sur la lettre
qpour sortir de la page de manuel.
C'est ta documentation de base pour comprendre ce que font tes fonctions.
Tu trouves de la doc en ligne aussi, par exemple :
https://pubs.opengroup.org/onlinepubs/009695399/functions/stat.html (standard POSIX)
https://linux.die.net/man/2/stat (un des nombreux sites qui reproduisent des pages de manuel Linux sur le Web)
C'est pour un exercice, une devinette, un pari, un gage ?
Dal
euh.. j'avais fait un gros pavé et mon ordi a redémarrer mon navigateur...
donc pour faire bref, les mans anglais sont trop précis pour moi et les man français trop incomplet pour m'aider, je me suis renseigné un bon moment avant de venir vous embêtez ;)
ca m'aiderais beaucoup que vous me donniez une piste concrète car on est limité en temps sur le projet. pour le moment je suis passé outre mais j'aimerais bien revoir cette partie du code quand j'aurais une piste ou si je fini plus tot que prévu.
pour les chemins inexistant, après le test avec stat, j'appelle perror pour savoir ce qui as posé problème et j'ai entendu dire que des appels de errno en boucle peuvent mener cette variable miracle à buger, vous me conseillez de changer de fonction ? un appel de strerror peut-être ?
pour gerer certains cas, je pense que une fonctions pour check les permissions sur le chemin d'accès peut aider mais je pense que il ne faut pas que ça pour compléter mon code.
voila, merci de m'aider si possible et bonne suite à vous.
donc pour faire bref, les mans anglais sont trop précis pour moi et les man français trop incomplet pour m'aider, je me suis renseigné un bon moment avant de venir vous embêtez ;)
ca m'aiderais beaucoup que vous me donniez une piste concrète car on est limité en temps sur le projet. pour le moment je suis passé outre mais j'aimerais bien revoir cette partie du code quand j'aurais une piste ou si je fini plus tot que prévu.
pour les chemins inexistant, après le test avec stat, j'appelle perror pour savoir ce qui as posé problème et j'ai entendu dire que des appels de errno en boucle peuvent mener cette variable miracle à buger, vous me conseillez de changer de fonction ? un appel de strerror peut-être ?
pour gerer certains cas, je pense que une fonctions pour check les permissions sur le chemin d'accès peut aider mais je pense que il ne faut pas que ça pour compléter mon code.
voila, merci de m'aider si possible et bonne suite à vous.
Bonjour,
Rien de possible en standard.
En revanche, tu peux tout simplement lire le fichier avec readlink() et si la fonction renvoie -1 et que errno vaut ENOENT tu sais que le fichier n'existe pas.
Cdlt
Rien de possible en standard.
En revanche, tu peux tout simplement lire le fichier avec readlink() et si la fonction renvoie -1 et que errno vaut ENOENT tu sais que le fichier n'existe pas.
Cdlt
@traduil:
https://linux.die.net/man/2/readlink
si c'est un chemin d'accès existant, ou un chemin vers autre chose qu'un lien symbolique, readlink va renvoyer une erreur (-1) et mettra errno à EINVAL. Malgré l'erreur, tu peux en déduire que ce chemin existe (mais que ce n'est pas un chemin vers un lien symbolique).
si tu n'as pas d'erreur (autre chose que -1), c'est un lien symbolique existant, mais readlink ne te dira pas si le lien pointe sur quelque chose qui lui même existe (contrairement à stat).
il y a d'autres erreurs, éventuellement à traiter selon ce que l'on te demande ou tes choix de conception (par exemple EACCES, qui peut être renvoyé par stat également, entre autres).
@fiddy: pourquoi ta préférence pour readlink plutôt que stat ?
Dal
https://linux.die.net/man/2/readlink
si c'est un chemin d'accès existant, ou un chemin vers autre chose qu'un lien symbolique, readlink va renvoyer une erreur (-1) et mettra errno à EINVAL. Malgré l'erreur, tu peux en déduire que ce chemin existe (mais que ce n'est pas un chemin vers un lien symbolique).
si tu n'as pas d'erreur (autre chose que -1), c'est un lien symbolique existant, mais readlink ne te dira pas si le lien pointe sur quelque chose qui lui même existe (contrairement à stat).
il y a d'autres erreurs, éventuellement à traiter selon ce que l'on te demande ou tes choix de conception (par exemple EACCES, qui peut être renvoyé par stat également, entre autres).
@fiddy: pourquoi ta préférence pour readlink plutôt que stat ?
Dal
l'usage de opendir ne marche pas sur un lien vers un dossier en plus, il faut donner le readlink du lien sur le dossier, donc c'est d'autant plus obsolète car il me faut lister les liens sur dossier comme le dossier qui est linké par le lien (sauf si l'option ls -l est envoyé mais ce n'est pas tout le temps).