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

POSIX C Discussion :

problèmes avec execl


Sujet :

POSIX C

  1. #1
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut problèmes avec execl
    Bonjour,

    dans le cadre d'un exercice, je doit réaliser un programme my_ls qui imite la fonction ls. Il est dit dans le sujet que si aucun argument n'est fourni au programme, il utilisera le répertoire courant, c'est-à-dire que:
    est équivalent à Jusque là, pas de prob, voici à quoi ressemble le début du main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (argc==1) {
      execl(argv[0],argv[0],".",NULL);
      perror("execl");
      return EXIT_FAILURE;
    }
    Le problème, c'est que je dois maintenant rajouter des options (par exemple -a ou -l), et que dans ce cas,
    doit être équivalent à
    J'ai donc modifié le main:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    recupOptions(argc,argv);
    if (argv[optind]==NULL)  // optind est modifié par la fonction getopt()
      // on doit relancer le programme avec les mêmes options, mais en rajoutant "./"
    Et je ne sais pas du tout comment rajouter à la fin de argv un nouvel argument !
    Je n'ai pas trouvé de fonction exec* qui semble correspondre à ce que je veux. J'ai pensé à remplacer le NULL de argv par ".", mais c'est le meilleur moyen d'avoir un segfault. J'ai pensé créer dynamiquement un tableau identique à argv mais avec en plus la chaine ".", mais cette solution ne me parait pas très jolie...

    Merci d'avance pour votre aide

  2. #2
    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 : 61
    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
    Points : 50 367
    Points
    50 367
    Par défaut
    J'ai pas bien compris l'intérêt de ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (argc==1) {
      execl(argv[0],argv[0],".",NULL);
      perror("execl");
      return EXIT_FAILURE;
    }
    Visiblement, si il n'y a pas d'argument, tu relances le programme en fournissant un argument ".". Admettons mais quel gâchis, cela coûte cher en ressources de lancer un programme.

    On peut imaginer un truc comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    char *repertoire = NULL;
    if(argc == 1)
    {
       repertoire = ".";
    }
    else
    {
       repertoire = argv[1];
    }
     
    /* listing du répertoire */
    ...
    Autre chose, je ne pense pas que tu aies regardé en détail la fonction getopt(). C'est elle qui te permettra de gérer correctement tous tes paramètres (et en plus dans l'aide, il y a un exemple d'utilisation, c'est trop facile ).
    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
    .

  3. #3
    Membre averti
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2008
    Messages
    187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Octobre 2008
    Messages : 187
    Points : 448
    Points
    448
    Par défaut
    C'est vrai que j'avais pas trop réfléchi au fait que lancer un programme soit couteux... C'est effectivement plus simple comme ça

    Sinon pour la fonction getopt, j'ai pas de problème, tout marche correctement...

    Merci beaucoup !

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

Discussions similaires

  1. Problème avec execl
    Par issa2910 dans le forum POSIX
    Réponses: 4
    Dernier message: 03/01/2009, 11h59
  2. Problème avec execl
    Par xeron33 dans le forum C
    Réponses: 4
    Dernier message: 10/06/2008, 20h42
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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