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 :

executions de commandes


Sujet :

C

  1. #1
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut executions de commandes
    Bonjours,
    je travaille en ce moment sur un shell maison qui doit comporter plusieurs caractéristiques.
    je rencontre un petit problème lier à l'éxecutions de diverses commandes,celles se trouvant dans /bin/ (pour linux).
    en fait j'arrive sans soucis à les exécuter quand il n'y a pas d'espaces entre le prompt et la commande, seulement j'aimerais bien pouvoir utiliser la commande comme dans un shell normal : avec des espaces .
    je vous montre un exemple de mon shell et ce qu'il affiche dans le cas d'espace entre le prompt et la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $>ls   -a
    affichage de cmd:[/bin/ls]     // commande ls -a avec trois espaces, j'ai mis un printf a chaque fois pour voir quelle commande j'envoie.
    .  ..  getarg.o  getcmd.o  .git  lib  libmy.a  Makefile  malloc_and_free_funct.o  minishell.o  my.h  mysh  str.o
    $>ls
    affichage de cmd:[/bin/ls]
    getarg.o  getcmd.o  lib  libmy.a  Makefile  malloc_and_free_funct.o  minishell.o  my.h	mysh  str.o
    $>/bin/ls
    affichage de cmd:[/bin/ls]
    getarg.o  getcmd.o  lib  libmy.a  Makefile  malloc_and_free_funct.o  minishell.o  my.h	mysh  str.o
    $>      ls 
    affichage de cmd:[/bin/ls]
    /bin/ls: impossible d'accéder à 'ls': Aucun fichier ou dossier de ce type //la commande avec des espaces ne fonctionne pas et affiche ce message .
    $>
    Ce que je trouve curieux c'est que la commande est bien envoyé , le ls est bien reconnu en /bin/ls .
    Je me demande si il n'y a pas un caractère invisible ou des caractères qui sont rajoutés au moment de l'execve..

    je vous poste mon code n'hésitez pas à me poser des questions si besoins , Merci !

    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
    void   manage_process(char **av, char *cmd, int cc, char **envp)
    {
      pid_t pid;
      char  *path;
      int error;
      int a;
     
      a = 0;
      pid = fork();//duplication du processus avec fork
      if (pid == 0)
        {
          av = getarg(cmd, cc, av); //recupération des arguments si il y en a
          cmd = getcmd(cmd, cc); //récupération propre de la commande 
          // cmd[cc - 1] = '\0';
          cmd = my_concat(cmd); //rajoute le path à la commande si celle ci est envoyé sans le path (ex: ls)
          av[0] = cmd;
          error = execve(cmd, av, envp); //éxecution de la commande cmd avec les arguments av
          if (error == -1) //gestion d'erreur ; prolème d'execve
    	{
    	  write(1, "error: bad request.\n", 20);
    	  free(cmd);
    	  exit (0);
    	}
        }
      else
        wait(NULL);
    }

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 631
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 631
    Points : 10 558
    Points
    10 558
    Par défaut
    La seule explication c'est que tu exécutes "ls ls"

    Et avec le peu de code qu'on a, un scénario possible c'est que les fonctions getarg et getcmd récupèrent toutes les 2 "ls".

    La première chose à faire c'est de tout afficher cmd, av, cc ..., avant pendant et après

  3. #3
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    Citation Envoyé par foetus Voir le message
    La seule explication c'est que tu exécutes "ls ls"

    Et avec le peu de code qu'on a, un scénarion possible c'est que les fonctions getarg et getcmd récupèrent toutes les 2 "ls".

    La première chose à faire c'est de tout afficher cmd, av, cc ..., avant pendant et après
    arff, tu es sûre pour le double ls?
    tu as raison ,je vais vérifier toutes me variables , je n'avais pas pensé à check cmd, av ect
    Merci pour ton conseil !

  4. #4
    Membre habitué Avatar de awesomeman
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2015
    Messages : 166
    Points : 136
    Points
    136
    Par défaut
    c'est bon , merci beaucoup.
    Enfait il considérait le ls comme un argument ducoup j'ai fais un petit av[1] = NULL (c'est sale mais bon..) et ca marche sans problème !

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

Discussions similaires

  1. Réponses: 21
    Dernier message: 08/08/2005, 11h57
  2. [Debutant(e)][Système]Executer une commande DOS
    Par iceman dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/05/2004, 14h30
  3. [.bat][FOR][IF]executer plusieurs commandes a la suite
    Par ¤FRIX¤ dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 23/03/2004, 09h24
  4. odre d'execution de commande
    Par marsupile dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/02/2004, 13h57
  5. Réponses: 3
    Dernier message: 02/09/2002, 18h49

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