Un problemme avec execve()

cs_izou Messages postés 29 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 14 avril 2008 - 9 févr. 2006 à 10:35
cs_izou Messages postés 29 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 14 avril 2008 - 10 févr. 2006 à 20:44
SALUT
VOILA LE PROLEMME DANS MON PROGRAMME JE VEUX UTILISER LA FONCTION execve();
POUR EXECUTER DES COMMANDES DU SHELL je fait:

pid=fork();
if(p==0)
{
if(strcmp(inst,"ls")==0) execve("/bin/ls",Arguments);
else
.
.
les autres commandes
.
.
};
else
wait(&status);

et normalemment a la fin de cette ligne j'affiche un text "Command>"
et l'utilisateur retape une autre commande.
le problemme c'est que le text ne s'affiche aue pour la premier fois et l'orsque je quit il affiche tous le text i.e:

Command>
Command>
Command>
.
.
.

4 réponses

cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
9 févr. 2006 à 11:05
J'ai pas trop pigé le problème que tu as, "le text ne s'affiche aue pour la premier fois", c'est à dire ? Qu'est-ce que tu réalises après le wait dans le père ? Comment tu as faits pour que le programme repropose d'entrer des commandes ? En tout cas, si l'execve affiche bien le résultat des commandes même si c'est lorsque tu quitte le programme le problème ne doit pas venir de l'appel execve mais plutôt de la structure de ton programme, des problèmes dans tes boucles peut-être ? Les paramètres à execve sont-ils biens passés (je doute que le problème vienne de là mais on sait jamais) ?
Tu peux te baser sur cet exemple si tu veux:
#include <stdio.h>
#include
#include <sys/types.h>

int main(int argc, char** argv, char** envp) {
int pid;

if((pid fork()) 0){
/* Fils */
if(!strcmp(argv[1], "ls"))
execve("/bin/ls", '\0', envp);
}else{
/* Père */
}

return 0;
}

Bonne chance.

Bouba
0
cs_izou Messages postés 29 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 14 avril 2008
9 févr. 2006 à 18:44
non regarde voici le l'architecture du programme:

while(1)
{
printf("Cmd>");
lirecommand(&command);
verifier(commande);
executer(commande);
}

dans la partie lire commande on lit les parametres et on les met dans un tableau de pointeurs de type char*

la deuxiemme verifie la syntaxe et dans la dernier je fait:

int p;
p=fork()
if(p==0)
{
if(strcmp(inst,"ls") execve("/bin/ls",arguments,NULL);
.
et les autre commandes de la meme façon chaque fois je compare puis j'execute;
perror("Echec l'hors de l'execution");
}
else
{
wait(&status);
}

ici tous les message que je veux afficher ne s'affiche pas sauf le premier et a la fin
l'orsque je tape la commande "quit" et elle s'execute en appelant exit(0);
tous les message qui devrait etre afficher sont affichés
comma,t fair pour que le message s'affiche l'orsque on lui fauit appele
i.e:
si commande incorecte normalement un message s'affiche
mais ici il sera retader a la fin .
tu vois un peix le problemme?
0
cs_bouba Messages postés 518 Date d'inscription dimanche 2 décembre 2001 Statut Membre Dernière intervention 10 novembre 2007 3
10 févr. 2006 à 15:34
J'ai a peut près pigé ton problème mais je ne vois pas d'ou celà peut venir, il faudrait plus de code pour ça. Ton code est long ? Tu peux peut-être nous le montrer en entier ? Au pire envoi moi un msg privé.

Bouba
0
cs_izou Messages postés 29 Date d'inscription samedi 16 avril 2005 Statut Membre Dernière intervention 14 avril 2008
10 févr. 2006 à 20:44
Merci dans tous le cas
0
Rejoignez-nous