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<unistd.h>
#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);}
}