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 :

Connaitre le chemin de l'executable


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut Connaitre le chemin de l'executable
    Bonjour,

    Je suis en C sous linux et j'ai besoin de connaitre le chemin d'installation de l'executable. Alors jusqu'à présent je croyais que argv[0] contenait le nom complet de l'exe avec son chemin, mais en fait ca contient la commande.
    Je ne sais pas comment obtenir cette info dans le code, merci de votre aide

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Bonjour,

    As-tu essayé de regarder la variable d'environnement pwd ?

  3. #3
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui, mais cela ne fonctionne que si je lance le programme à partir de son répertoire.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Mais tu as argv[0] qui complétera ce qu'il te manque.

  5. #5
    Membre éprouvé Avatar de uriotcea
    Homme Profil pro
    Ingénieur / physicien
    Inscrit en
    Septembre 2003
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur / physicien
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 301
    Par défaut
    Oui probablement qu'en combinant les 2, mais il y plusieurs cas de figure à considérer et ca devient un peu complexe. J'ai donc essayer ca mais ca ne fonctionne pas non plus, ca me répond "echec" et je ne vois pas pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    std::string get_selfpath() {
        char buff[1024];
        ssize_t len = ::readlink("/proc/self/mon_exe_name", buff, sizeof(buff)-1);
        if (len != -1) {
          buff[len] = '\0';
          return std::string(buff);
        } else {
          return("Echec");
        }
    }

  6. #6
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Oui probablement qu'en combinant les 2, mais il y plusieurs cas de figure à considérer et ca devient un peu complexe. J'ai donc essayer ca mais ca ne fonctionne pas non plus, ca me répond "echec" et je ne vois pas pourquoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    std::string get_selfpath() {
        char buff[1024];
        ssize_t len = ::readlink("/proc/self/mon_exe_name", buff, sizeof(buff)-1);
        if (len != -1) {
          buff[len] = '\0';
          return std::string(buff);
        } else {
          return("Echec");
        }
    }
    Bon c'est du C++ mais essaye simplement avec "/proc/self/exe" ... tu comprendras mieux si tu fais un ls -l /proc/self

  7. #7
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par uriotcea Voir le message
    Oui, mais cela ne fonctionne que si je lance le programme à partir de son répertoire.
    Bonjour,

    je suppose que l'exécutable est dans le path. Pour déterminer la localisation de l'exécutable tu peux déréférencer le lien /proc/<PID>/exe. En le faisant quick and dirty sans aucuns checks particuliers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <stdio.h>
    #include <unistd.h>
     
    int main(int argc, char** argv)
    {
      pid_t pid=getpid();
      char path[1024];
      char buffer[1024];
      ssize_t len;
     
      sprintf(path,"/proc/%u/exe", pid);
      len=readlink(path,buffer,1023);
      buffer[len]=0;
     
      printf("%s\n", argv[0]);
      printf("%s\n", path);
      printf("%s\n", buffer);
     
      return 0;
    }
    Pour rendre ce code utile il est nécessaire de vérifier chaque étape évidemment.

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

Discussions similaires

  1. [C#] Comment connaitre le répertoire courant d'exécution ?
    Par romstarr dans le forum Services Web
    Réponses: 4
    Dernier message: 30/08/2009, 17h37
  2. Réponses: 29
    Dernier message: 11/07/2008, 14h35
  3. Connaitre le chemin de l'executable
    Par geof dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/05/2008, 12h11
  4. Récupérer le chemin de l'executable MSACCESS.EXE
    Par mastasushi dans le forum Access
    Réponses: 2
    Dernier message: 24/05/2006, 12h00
  5. [XSLT] Connaitre le chemin d'un noeud
    Par virgul dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 02/03/2006, 13h48

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