IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Trouver le répertoire de l'exécutable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut Trouver le répertoire de l'exécutable
    Bonjour

    J'aimerai en C, sous Windows et sous Linux (les méthodes sont sûrement différentes) savoir repérer où est l'exécutable. J'avais pensé, travailler à partir de argc , argv et le répertoire courant, mais je viens de penser qu'il existe des liens et le PATH ! Donc, cette méthode devient caduque
    Mon but est de pouvoir accéder aux fichiers qui accompagnent mon exécutable comme des images ou d'autres fichiers que mon programme va lire.

    En écrivant ceci, je pense à une machine à gaz...
    1) chercher dans le path
    2) vérifier si c'est un lien et si oui, recommencer le point 2 tant qu'on n'a pas le véritable fichier.

    Question : ça donne quoi sous Linux si c'était un alias ?

    Remarque : je n'ai pas envie d'inventer la roue... Ça devrait déjà exister non ?
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    petite remarque qui ne répond pas à la totalité de ton message : tu ne peux pas laisser complètement tomber argc/argv car rien n'empêche un utilisateur de lancer un exécutable qui n'est pas dans un des répertoires de PATH (il suffit qu'il mette un chemin absolu/relatif correct).

    Donc, PATH ou argc/argv ? les deux mon général !


    autre remarque : sous Unix/Linux, le répertoire courant n'est pas, comme sous Windows (je crois) systématiquement "scanné" quand le système recherche un exécutable. Si "." n'est pas dans le PATH, et ben le système ne regarde pas le répertoire courant.

  3. #3
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Sous Windows, tu as la fonction GetModuleFileName() qui retourne le chemin complet de l'exécutable. Il suffit d'enlever le nom du fichier et tu as le répertoire de ce fichier.

    Par contre, tu te doutes bien que ce n'est pas transposable à Linux
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  4. #4
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    plxpy a tout à fait raison pour le ".". Le reste, j'y avait déjà pensé.

    Citation Envoyé par ram-0000 Voir le message
    Par contre, tu te doutes bien que ce n'est pas transposable à Linux
    Est-ce possible que pour une fois Windows serait moins compliqué que Linux ?
    Il doit bien exister quelque chose pour Linux
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  5. #5
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Sous Linux, pour en faire le moins possible, j'utiliserais la sortie standard de "which" (popen en lecture de la commande "which" pour argv[0]) : ça t'évite de "parser" le PATH et si l'utilisateur a lancé l'outil via un chemin, c'est géré également (puisque le code s'exécute, c'est que le système à trouvé l'exécutable !!!)

    Par contre, je crains que ça ne résolve pas le cas du lien symbolique.

    Une petite fonction récursive avec, en paramètre, le retour de la commande (pas le code retour mais le chemin lu sur la sortie standard) et qui s'arrête quand le fichier n'est pas un lien symbolique, devrait faire l'affaire.

    petit bémol à ce que j'ai écrit plus haut : j'ai raisonné en mode "ligne de commande". Si on lance l'appli (graphique, avec IHM) via un double-click, je ne sais pas trop ce qu'on récupère dans argv[0])

  6. #6
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par plxpy Voir le message
    petit bémol à ce que j'ai écrit plus haut : j'ai raisonné en mode "ligne de commande". Si on lance l'appli (graphique, avec IHM) via un double-click, je ne sais pas trop ce qu'on récupère dans argv[0])
    C'est aussi une question que je me pose !
    Je vais essayer de tester cet après midi

    Fait...

    On récupère la commande mise dans l’icône => Ça revient au même que la ligne de commande.
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  7. #7
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Citation Envoyé par ram-0000 Voir le message
    Sous Windows, tu as la fonction GetModuleFileName() qui retourne le chemin complet de l'exécutable. Il suffit d'enlever le nom du fichier et tu as le répertoire de ce fichier.
    Il doit y avoir des paramètres à passer au compilateur pour prendre en compte winbase.h qui est utile pour cette fonction !
    J'ai plein d'erreur lors de la compilation de winbase.h
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par défaut
    Citation Envoyé par troumad Voir le message
    Il doit y avoir des paramètres à passer au compilateur pour prendre en compte winbase.h qui est utile pour cette fonction !
    Non non, il faut inclure <windows.h> (et pas winbase.h)
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Rédacteur/Modérateur
    Avatar de troumad
    Homme Profil pro
    Enseignant
    Inscrit en
    Novembre 2003
    Messages
    5 607
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 5 607
    Par défaut
    Oui, c'est ce que je viens de voir et ça me fout tout en l'air avec des doublons de #define qui n'ont plus le même sens qui moi !
    Quelle idée insensée de mettre par exemple Avec cette bibliothèque, l'exécutable est passé de 246 ko à 535 ko !
    Modérateur Mageia/Mandriva Linux
    Amicalement VOOotre
    Troumad Alias Bernard SIAUD à découvrir sur http://troumad.org
    Mes tutoriels : xrandr, algorigramme et C, xml et gtk...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/08/2007, 10h46
  2. Réponses: 6
    Dernier message: 19/07/2007, 15h22
  3. Récuperer le répertoire de l'exécutable
    Par Loïc31 dans le forum C++
    Réponses: 10
    Dernier message: 14/06/2007, 13h49
  4. Réponses: 5
    Dernier message: 20/06/2006, 10h15
  5. Comment trouver le répertoire démarrage sous 98?
    Par PHILOSOPHE dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 18/11/2003, 20h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo