begin process at 2012 05 29 05:17:30
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Divers

 > 

Débutant(e)

 > 

Executer une commande avec exec


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Executer une commande avec exec

lundi 10 octobre 2011 à 11:47:03 | Executer une commande avec exec

andoid

Bonjour!

j'aimerai exécuter une commande avec exec mais j'arrive pas: je m'explique
je recupere la saisie de la commande sur le terminal grace a fgets:
char chaine[TAILLE];
fgets(chaine,TAILLE,stdin);
une fois la recuperer dans la chaine je sais pas comment l'éxéxuter.
C'est à ce niveau que je bloque
lundi 10 octobre 2011 à 12:09:11 | Re : Executer une commande avec exec

CptPingu

Administrateur CodeS-SourceS
Pourquoi faire un fgets, normalement réservé à la lecture dans un fichier, plutôt qu'un simple scanf ?
Fais voir le code de ton exec. (execvp normalement).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 10 octobre 2011 à 13:00:25 | Re : Executer une commande avec exec

andoid

char chaine[TAILLE];
fgets(chaine,TAILLE,stdin);
execvp(chaine,NULL);

Mais il marche puis exec ne fais pas ce que je veuts
lundi 10 octobre 2011 à 13:24:45 | Re : Executer une commande avec exec

CptPingu

Administrateur CodeS-SourceS
Le 2ème argument est mauvais. Il est dit dans la documentation, que ça doit être un tableau qui contient en premier argument le nom de l'exécutable, suivit de ses arguments, puis un NULL.

Exemple donné dans la doc officielle (que tu n'as pas du lire):
Code C/C++ :
const char* paramList[] = {"/bin/ls", "-l", "/u/userid/dirname", NULL};
execvp("/bin/ls", paramList);


Ce qui donne pour toi:
Code C/C++ :
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define TAILLE 256
#define XSTR(X) #X
#define STR(X) XSTR(X)

int main(void)
{
  char* cmd[2];
  char chaine[TAILLE];
  int ret = 0;
  int size = 0;

  scanf("%"STR(TAILLE)"s", chaine);

  size = strlen(chaine);
  cmd[0] = malloc((size + 1) * sizeof(char));
  strncpy(cmd[0], chaine, size);
  cmd[0][size] = 0;
  cmd[1] = NULL;
  ret = execvp(chaine, cmd);
  printf("Error = %i\n", ret);
  free(cmd[0]);

  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 10 octobre 2011 à 14:05:00 | Re : Executer une commande avec exec

andoid

A priori le code il marche bie. Je dois un shell et jai codé les commandes ls, cd, pwd, redirection, cat donc si je reçois en ligne de commande ls comment je dois faire pour qu'il execute mon ls sachant que j'arrive à interpreter la commande écrite.
je pense que je vais faire
const char *cmd[]={"path de mon executable",NULL}
execvp(path,cmd);
lundi 10 octobre 2011 à 14:20:19 | Re : Executer une commande avec exec

CptPingu

Administrateur CodeS-SourceS
Avec l'exemple que je t'ai donné, tu as tout ce qu'il faut pour réussir ton shell.

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 10 octobre 2011 à 14:33:20 | Re : Executer une commande avec exec

andoid

Un grand merci par contre dans le code que tu m'as passé j'ai pas trop compris
cmd[0][size] = 0;
lundi 10 octobre 2011 à 14:51:04 | Re : Executer une commande avec exec

CptPingu

Administrateur CodeS-SourceS

cmd[0][size] = 0;


cmd est un tableau de chaîne de caractères.
Dans la première case, il y a une chaîne qui contient le nom du binaire.

Sur cette première chaîne, j'ai copié le nom du binaire, mais sans le 0 terminal.
Donc je vais à la dernière case de la chaîne, et j'appose un 0 terminal (0 == NULL == '\0')
(Je rappelle qu'une chaîne de caractères se termine toujours par un 0 terminal).

________________________________________________________________________
Historique de mes créations, et quelques articles:
http://0217021.free.fr/portfolio
Merci d'utiliser Réponse acceptée si un post répond à votre question
lundi 10 octobre 2011 à 15:25:33 | Re : Executer une commande avec exec

andoid

merci!! Là j'ai bien compris exec
lundi 10 octobre 2011 à 15:30:36 | Re : Executer une commande avec exec

andoid

Bon bref une derniere question par exemple ma commande cat qui j'ai codée elle prend un argument commen faire pour placer l'arguments dans le tableau cmd

1 2

Cette discussion est classée dans : chaine, commande, executer, fgets, exec


Répondre à ce message

Sujets en rapport avec ce message

Executer une commande DOS en C++ [ par Kheo ] Quel API faut il utiliser pour executer une commande DOS depuis un source C++.J'ai trouvé _exec mais ca ne fait rien.../ Kheo / Bleme avec la commande strncpy [ par FeetloveR666 ] Salut a tous,Bon voila g un soucy avec la commande strncpy permattant d'extraire une parti d'un chaine de caratère ( exos demander en tp )D'apres ce q Commande wsprintf et SendMessage [ par FeetloveR59 ] Bon je cherche a comprendre comment marche ces deux fontionsD'apres ce que g compris wsprintf formate une chaine de caractere et SendMessage envoie ce Exec??? [ par samki ] Bonjour,Je développe une application en MFC qui permet de gérer un logiciel.Ce logiciel fournit des ligne de commande pour créer un projet et le compi Executer une chaine de caracteres... [ par Clonk ] Bonjour,Je voudrais, por alléger mon appli, pouvoir executer une fonction (déjà définie dans mon code) dont le nom est contenu dans une variable. Par executer une commande systeme [ par anthraxx ] bonjour,je voulais savoir si quelqu'un connait un moyen d'éxecuter des commandes su systemes d'exploitation sous Windows, et d'en récupérer l'output.I Cin capricieux... [ par DJeS ] c'est sans doute tres idiot mais bon voila...je fais un ptit prog test pr m'assurer que l'erreur viens bien d'ou je pense...:#include int main(){char Comment executer une commande systeme sur Linux avec gcc ??? [ par jean84 ] Salut a tous ! Je voudrais savoir s'il existe une commande telle que system() sous linux ??? Si oui laquelle ??? Merci "Avant même de fonctionner, tou executer commande [ par edpunisher ] kikoo aidez moi pleaaaaaaaze je voudrai executer une commande unix et retourner le resultat dans une variable prédefini j offre 100 000$ a ki pourra m executer une commande dos [ par Daimadoshi ] slt tlm, voila je voudrai pendant un programme executer une commande dos. j'ai pensé lancer ma commande avec une ligne dans ce genre mais cela ne semb


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,265 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales