3 votes

Est-ce qu'une fonction existe qui recherche la variable unix $PATH et retourne vrai si un certain fichier existe ?

La fonction execvp() exécute le programme donné en argument. Elle vérifie la variable $PATH pour trouver le programme. Je suis en train d'écrire quelque chose dans lequel je voudrais vérifier si plusieurs programmes existent avant d'appeler des fonctions exec(). Quel est le meilleur moyen de le faire?

7voto

grepsedawk Points 3413

Vous pouvez utiliser getenv pour obtenir la variable d'environnement PATH puis rechercher à travers celle-ci.

http://www.opengroup.org/onlinepubs/000095399/functions/getenv.html

Vous pouvez ensuite utiliser fopen pour vérifier l'existence des noms de fichiers binaires spécifiques.

Vous pouvez également faire quelque chose comme system("which App"). qui recherche $PATH pour vous.

http://en.wikipedia.org/wiki/System_(C_standard_library)

http://en.wikipedia.org/wiki/Which_(Unix)

3voto

Dustin Points 35205

En fait, l'exécution de glibc et de netbsd essaie réellement d'exécuter la commande pour chaque élément le long du chemin jusqu'à ce qu'elle réussisse ou qu'elle épuise le chemin à chercher. Ne laisse pas beaucoup de place pour la réutilisation, mais semble bon.

En général, pour des questions comme celle-ci, j'aime aller à la source et voir ce qu'elle fait. Celle de NetBSD est généralement la meilleure lecture :

2voto

Zoredache Points 8873

La commande which est probablement ce que vous voulez.

0voto

joveha Points 763

Une fois que vous avez un chemin d'accès absolu (canonisée), vous pouvez utiliser soit stat(2) ou access(2) pour voir si le fichier existe.

Avec stat:

struct stat st;
if (stat(path, &st)) {
   // le chemin n'existe pas
}

Avec access:

if (access(path, F_OK)) {
   // le chemin n'existe pas
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X