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 :

Creation d'un shell probleme avec execve


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut Creation d'un shell probleme avec execve
    Bonjour

    Je suis en train de creer un shell et le comportement d'execve me parait anormal.

    exec[0] contient le path, exemple : "/bin/ls"
    les autres cases contiennent les parametre (-l -r ...)
    error m'affiche un "A" a chaque erreur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
          pid = fork();
          if (pid == 0)
            {
              if (execve(exec[0], exec, envp) == -1)
                error(exec);
              pid = getpid();
              kill(pid, SIGTERM);
            }
          else
            wait(0);
    apres execution :
    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
     
    $> ls
    a.out main.c exec.c
    $> ls -r
    exec.c main.c a.out
    A
    $> ls
    a.out main.c exec.c
    $> ls -l -r
    A
    A
    A
    $> ls
    A
    &>
    je ne comprend pas pourquoi j'ai une erreur si je passe un parametre, pourquoi rien ne marche avec plus d'un parametre et surtout pourquoi execve ne fonctionne plus apres ca bien que je kill le pross apres l'echeque.

    merci pour toute explications

  2. #2
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Est-ce que tu as un bien un NULL en dernière case de exec et envp ?

    Ton deuxième exemple (ls -r) est bizarre. Il fait un ls, donc le execve() a marché. Mais si le execve() a marché alors il ne retourne pas, donc ton error() n'est pas exécuté, donc d'où vient le "A" ?

    Si j'étais toi je ferais autre chose qu'un error(), qui n'est pas standard et ne s'utilise de toute façon pas comme ça. Fait simplement un perror("execve"), ça sera plus clair.

    D'autre part tu peux te contenter de faire un exit() plutôt que getpid() + kill(), qui est un peu ridicule. D'ailleurs le "if" ne sert à rien non plus.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    j'ai verifie et il y a bien un NULL dans la derniere case d'exec.
    je ne sais vraiment pas d'ou viennent les erreures.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    Apres plusieurs modifications j'obtiens, cela apres execution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $> ls
    /bin/ls: cannot access : No such file or directory
    $>
    quelqu'un saurait pourquoi le path n'est plus reconnu ?

Discussions similaires

  1. Mini-shell probleme avec pipe
    Par Appsolu dans le forum C
    Réponses: 11
    Dernier message: 13/08/2011, 00h07
  2. script shell : probleme avec sed et awk
    Par salseropom dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 05/06/2007, 11h57
  3. probleme avec creation d'un raccourci
    Par jobal dans le forum Access
    Réponses: 3
    Dernier message: 28/04/2006, 19h46
  4. [VBscript] probleme avec shell.exec
    Par eown dans le forum Windows
    Réponses: 1
    Dernier message: 23/04/2006, 09h24
  5. probleme avec creation requete sql server
    Par Firas_tn dans le forum MS SQL Server
    Réponses: 19
    Dernier message: 15/04/2005, 12h12

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