La fonction execvp() exécute le programme qui est donné en argument. Il vérifie la variable $ PATH pour trouver le programme. J'écris quelque chose dans lequel je voudrais vérifier si plusieurs programmes existent avant d'appeler des fonctions exec(). Quelle est la meilleure façon de faire cela?
Répondre
Vous pouvez utiliser getenv pour obtenir la variable d'environnement PATH, puis la parcourir.
http://www.opengroup.org/onlinepubs/000095399/functions/getenv.html
Vous pouvez ensuite utiliser fopen pour vérifier l'existence des noms binaires spécifiques.
Vous pouvez également faire quelque chose comme système ("quelle application"). qui recherche $ PATH pour vous.
+1 pour suggérer «qui». Corrigez vos liens Wikipedia, aussi. – strager
Correction des liens :) – grepsedawk
la commande qui est probablement ce que vous voulez.
Cela a été mentionné dans la réponse de @ grepsedawk.myopenid.com. – strager
L'execvp de glibc et de netbsd essaie en fait d'exécuter la commande pour chaque élément le long du chemin jusqu'à ce qu'il réussisse ou qu'il manque de chemin pour rechercher. 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'il fait. NetBSD c'est généralement la meilleure lecture:
Une fois que vous avez un chemin absolu (canonisé), vous pouvez utiliser stat (2) ou accès (2) pour voir si le fichier existe.
Avec stat:
struct stat st;
if (stat(path, &st)) {
// path doesn't exist
}
Avec un accès:
if (access(path, F_OK)) {
// path doesn't exist
}
- 1. Existe-t-il une fonction qui renvoie le caractère/la chaîne à un point dans un fichier .txt?
- 2. fonction qui renvoie une chaîne
- 3. Pourquoi une méthode "fichier existe" dans de nombreuses langues renvoie true pour un répertoire?
- 4. unix recherche de chemin C fonction
- 5. Bash - $ PATH et $ {PATH}
- 6. fonction php qui renvoie une requête MySQL
- 7. Comment créer une requête sql qui utilise la recherche plein texte si un index existe?
- 8. Existe-t-il une fonction qui renvoie la valeur ASCII d'un caractère? (C++)
- 9. ServiceConnection :: onServiceConnected non appelé même si Context :: bindService renvoie true?
- 10. exécuter une commande shell unix si la sortie ne dispose pas d'un certain nombre de lignes
- 11. Existe-t-il une fonction équivalente qui renvoie le caractère à la position «X» en PHP?
- 12. La recherche Google renvoie une page blanche
- 13. Comment vérifier si une variable existe dans un modèle FreeMarker?
- 14. Unix: Obtenir PATH Exporter vers « Stick »
- 15. Fonction qui renvoie la référence à modifier dans C#
- 16. Ajouter au fichier si existe et créer sinon
- 17. ColdFusion: Comment vérifier si un certain élément existe dans un tableau à deux dimensions?
- 18. Comment faire une recherche regex dans Nokogiri pour un texte qui correspond à un certain début?
- 19. mysql se comporte différemment selon si une variable d'utilisateur existe
- 20. Vérifie si un ID existe dans une base de données
- 21. Comment conditionnelle a mis en place une variable Makefile en testant si un fichier existe
- 22. Comment implémentez-vous une fonction qui renvoie l'URL de la dernière page visitée?
- 23. Développez une variable booléenne à la chaîne « true » ou « false »
- 24. p/invoque une fonction C qui renvoie un pointeur vers une structure
- 25. Comment vérifier si un fichier existe sur un serveur en utilisant C# et la classe WebClient
- 26. Existe-t-il une fonction PHP ou une variable donnant le nom d'hôte local?
- 27. Impossible d'exécuter une cible Ant uniquement si un fichier existe?
- 28. Comment vérifier si un fichier existe dans un fichier makefile
- 29. Essayer de transmettre une variable C# booléenne à une variable javascript et la définir à
- 30. PHP: Dites si un fichier existe?
Vous ne devriez probablement pas compter uniquement sur l'existence - vous avez besoin du fichier d'avoir des autorisations d'exécution (pour vous) aussi. Même ce n'est pas infaillible; Si le programme démarre #!/bin/inexistant, il ne s'exécutera pas car le programme n'existe pas. C'est pourquoi execlp() essaye juste chaque nom à son tour, je crois. –