143 votes

Comment trouver l'emplacement de l'exécutable en C ?

Existe-t-il un moyen en C/C++ de trouver l'emplacement (chemin complet) du programme en cours d'exécution ?

(Le problème avec argv[0] est qu'il ne donne pas le chemin complet).

5voto

Thomas Points 1464

Rappelez-vous que sur les systèmes Unix, le binaire peut avoir été supprimé depuis son lancement. C'est parfaitement légal et sûr sur Unix. Aux dernières nouvelles, Windows ne vous permet pas de supprimer un binaire en cours d'exécution.

/proc/self/exe sera toujours lisible, mais ce ne sera pas vraiment un lien symbolique fonctionnel. Ce sera... bizarre.

4voto

finnw Points 24592
readlink("/proc/self/exe", buffer, buffer_size);

4voto

APDent Points 446

Sur Mac OS X, utilisez _NSGetExecutablePath .

Ver man 3 dyld et cette réponse à une question similaire.

3voto

Grumbel Points 1296

Pour Linux, vous pouvez trouver le /proc/self/exe de faire les choses dans une belle bibliothèque appelée binreloc, que vous pouvez trouver à l'adresse suivante :

0voto

JCCyC Points 2732

Je voudrais

1) Utilisez la fonction basename() : http://linux.die.net/man/3/basename
2) chdir() vers ce répertoire
3) Utiliser getpwd() pour obtenir le répertoire courant

De cette façon, vous obtiendrez le répertoire sous une forme soignée et complète, au lieu de ./ ou ../bin/.

Vous voudrez peut-être sauvegarder et restaurer le répertoire actuel, si cela est important pour votre programme.

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