Erreur sur les tubes

Signaler
Messages postés
108
Date d'inscription
samedi 31 mars 2012
Statut
Membre
Dernière intervention
16 juin 2013
-
Messages postés
108
Date d'inscription
samedi 31 mars 2012
Statut
Membre
Dernière intervention
16 juin 2013
-
Bonjour à tous:
J'essais d'exuter une commande passé ligne de commande avec un pipe:
là je suis en mode test:
je veux juste exécuter ls -l |grep tube.c je sais le faire manuellement avec execlp("ls","ls","-l",NULL) mais je veux pas cela car dans mon programme je sais pas ce que l'utilisateur va mettre. Dans ce programme de test je tient pas compte du "-l" de "ls" et "tube." de "grep" donc je vais juste mettre ls | grep. Le probléme que j'ai est que si je tape ls | grep il fait rien , il faut que je mette un pipe vide à la fin pour qu'il l'execute genre ls|grep| j'arrive pas à voir le probleme:

voici le code

#include<stdio.h>
#include<stdlib.h>
#include
#include<string.h>
#define TAILLE 100



char** ispipe(char* commande)
{


int i=0;
char *c;
char** arg=malloc((strlen(commande)+1)*sizeof(char*));

c = strtok(commande, "|");
do {

arg[i]=c;
i++;
//puts(c);
c = strtok(0," |");

}while (c);

printf("arg[1] =%s\n",arg[1]);
return arg;
/*Libération de la mémoire occupée*/
free(arg);

}



int main ()

{
pid_t pid;
int tube[2];
char cmd[TAILLE];
/*Je recupére la ligne de commande*/
fgets(cmd,TAILLE,stdin);
char ** args=ispipe(cmd);


if(pipe(tube))
perror("pipe failled");


if((pid fork()) 0)
{/* FILS */

fclose(stdout);

dup(tube[1]);

close(tube[0]);
execlp(args[0],args[0],"-l",NULL);}
else
{
fclose(stdin);

dup(tube[0]);

close(tube[1]);
execlp(args[1],args[1],"tube.c",NULL);}

}

2 réponses

Messages postés
1466
Date d'inscription
vendredi 2 janvier 2004
Statut
Modérateur
Dernière intervention
14 février 2014
1
salut,




Ouais, dans les medias aussi ils n'arretent pas de se tromper avec les tubes...

grep est un filtre, si tu ne filtres rien, il est peut-être normal que tu obtiennes rien.

@++
Messages postés
108
Date d'inscription
samedi 31 mars 2012
Statut
Membre
Dernière intervention
16 juin 2013

sûr sûr