Fonction validant l'existant d'un chemin d'accès en C
Fermé
tranduil
-
23 mars 2015 à 10:01
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 26 mars 2015 à 00:38
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 26 mars 2015 à 00:38
A voir également:
- Fonction validant l'existant d'un chemin d'accès en C
- Fonction si et - Guide
- Acces rapide - Guide
- Donnez à ce fichier les mêmes droits d'accès que les autres notes de service ✓ - Forum Windows
- Fonction filtre excel n'existe pas - Forum Excel
- Fonction moyenne excel - Guide
4 réponses
jisisv
Messages postés
3645
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
934
23 mars 2015 à 16:55
23 mars 2015 à 16:55
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
23 mars 2015 à 17:23
23 mars 2015 à 17:23
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.
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
23 mars 2015 à 22:16
23 mars 2015 à 22:16
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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
>
tranduil
Modifié par fiddy le 25/03/2015 à 07:28
Modifié par fiddy le 25/03/2015 à 07:28
Ça serait bien que tu montres ce que tu as écrit comme test pour que l'aide soit plus efficace.
[Dal]
Messages postés
6200
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
7 janvier 2025
1 097
Modifié par [Dal] le 25/03/2015 à 10:26
Modifié par [Dal] le 25/03/2015 à 10:26
@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
fiddy
Messages postés
11069
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
23 avril 2022
1 844
26 mars 2015 à 00:38
26 mars 2015 à 00:38
Disons que stat() retourne trop d'informations (structure) et est généralement utilisé pour d'autres problèmes. Mais bon, au vu des fonctions proposées, c'est peut-être la moins pire finalement.
23 mars 2015 à 18:39
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).