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 un fichier dans le "PATH"


Sujet :

C

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 31
    Points
    31
    Par défaut Trouver un fichier dans le "PATH"
    Bonsoir voilà, je dois trouver un fichier appartenant au "PATH" , exemple ls qui se trouve dans le /bin

    J'ai fait ceci

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <dirent.h>
    #include <string.h>
     
    void separe ( char *chaine, char *tab[])
    {
      char buffer[1024];
      char *chn = chaine;
      char *buf = buffer;
      int n = 0;
     
      while(*chn != '\0')
      {
          tab[n++] = buf;
          while(*chn != '\0' && *chn != ':')
          {
            *buf++ = *chn++;
          }
          *buf++ = '\0';
          if(*chn == ':')
          {
            chn++;
          }
      }
     tab[n]=NULL;
    }
     
     
    int main (int argc, char *argv[])
    {
     
      char *tab[50];
      int i=0;
     
      char *chaine = malloc(sizeof(char));  
      char* cmd = malloc(20*sizeof(char));
     
       separe(getenv("PATH"), tab);
     
       printf("entrer un fichier à trouver");
       scanf("%s", cmd);
     
        i=0;
     
        DIR *dp;
        struct dirent *d;
     
        int trouve;
        dp = opendir (tab[i]);
        char *buffer=malloc(1000*sizeof(char));
     
        while((d=tab[i++]) !=NULL)
        {
            trouve = strcmp(d->d_name, cmd);
     
            if(d->d_name[0] != '.')
            {
                puts(d->d_name);
     
                if(trouve==0)
                {
                    strcpy(buffer, d->d_name);
                    strcat(buffer, "/");
                    strcat(buffer, cmd);
                    printf("Cette commande se trouve dans: %s", buffer);
                    free(buffer);
                    closedir(dp);
                    exit (0);
                }
            }
     
    }
     
     
     
      exit (1);
    }

    la fonction separe est juste pour séparer les différentes parties du "PATH", mais la j'avoue que je pèche un peu

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 862
    Points
    30 862
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par walase Voir le message
    la fonction separe est juste pour séparer les différentes parties du "PATH", mais la j'avoue que je pèche un peu
    Salut
    Tu devrais t'intéresser à la fonction strtok_r() qui est justement faite pour ça...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 28
    Points : 31
    Points
    31
    Par défaut
    Nan séparer je l'ai déjà fait , cela fonctionne , mais c'est pour la suite ou il faut rechercher un fichier par exemple ls dans le /bin du "path" ou je coince

    Je vais quand même utiliser strtok ça parait plus propre

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 862
    Points
    30 862
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par walase Voir le message
    Nan séparer je l'ai déjà fait , cela fonctionne , mais c'est pour la suite ou il faut rechercher un fichier par exemple ls dans le /bin du "path" ou je coince
    Bah, ben tu joues avec les opendir() et readdir() pour traiter chaque nom situé dans le dossier en cours (ici "/bin") et tu regardes si le nom de fichier est "ls" et ci ce "ls" est bien un fichier de type régulier. Pour ce dernier détail la fonction stat() t'aidera.

    Citation Envoyé par walase Voir le message
    Je vais quand même utiliser strtok ça parait plus propre
    Attention, je n'ai pas parlé de strtok() qui existe mais qui est dépréciée au profit de strtok_r(). Et bien évidemment c'est toujours plus propre d'utiliser des fonctions standard que de se refaire les siennes avec les risques associés...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    @Sve@r: Note: Je suis peut-être en retard question normes (je n'ai pas de PDF sur le C11), mais dans C99 draft 3, strtok() n'est pas dépréciée et strtok_r() n'est pas standard C, seulement POSIX.

    D'un autre côté, le code de walase inclut des headers POSIX, donc ça ne doit pas être un problème dans le cas présent.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 631
    Points : 30 862
    Points
    30 862
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Citation Envoyé par Médinoc Voir le message
    strtok_r() modifie aussi le premier argument. strtok() est dépréciée non pas pour cette raison, mais parce qu'elle utilise une variable statique.
    @Sve@r: Note: Je suis peut-être en retard question normes (je n'ai pas de PDF sur le C11), mais dans C99 draft 3, strtok() n'est pas dépréciée...
    Ca s'en va et ça revient, c'est fait de tout et de rien...
    http://www.developpez.net/forums/d79...k/#post4556135

    Citation Envoyé par Médinoc Voir le message
    D'un autre côté, le code de walase inclut des headers POSIX, donc ça ne doit pas être un problème dans le cas présent.
    Dans le cas présent et dans le code présenté strtok() ne présenterait pas de souci. Mais ensuite...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 518
    Points
    41 518
    Par défaut
    Ah, mince. Euh, à ma décharge, c'est ZeRevo qui l'a dit en premier, pas moi. Mais je suis quand même coupable de l'avoir répété...

    Je modifierais bien mon message pour rajouter un "(officieusement)" devant "dépréciée", mais vu que les non-mods ne peuvent pas éditer leurs vieux messages (une idée de génie, vraiment! )...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

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

Discussions similaires

  1. Trouver un fichier dans le répertoire de la base
    Par SnakeCharmer dans le forum VBA Access
    Réponses: 3
    Dernier message: 21/05/2008, 23h14
  2. Trouver un fichier dans un dossier
    Par poukill dans le forum C++
    Réponses: 3
    Dernier message: 08/06/2007, 11h36
  3. VBA trouver un fichier dans un repertoire
    Par darkspoilt dans le forum Général VBA
    Réponses: 4
    Dernier message: 18/05/2007, 12h06

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