[c] problem z execl


(Uzi123) #1

Witam. poniżej zamieszaczam kod programu. Program ma najpier wykonac ps, poźniej zrobić na tym grep "TTT" a na koniec wc -l (wiem można w bash, ale ja chcę tak). Etap z ps przechodzi poprawnie. Najprawdopodobniej jest coś nie tak z drugą z wywoływanych funkcji execlp. Błąd jaki zwraca program jest następujący:

[USE] 'TTT' [OPTION]...[PATTERN] [FILE]...

Gdzie jest problem.

#include 

#include 

#include 

#include 

#include 

#include 


int main()

{

int NR_FU=3;

pid_t pid;

int fd1[2], fd2[2]; //fd1 u potomkow standartowe wyjscie 

		    //fd2 u potomkow standartowe wejscie

int i;

int ind;

char text1[1024],text2[1024],text3[1024];


for (i=0;i
 {

printf ("------------------------------ \n");

printf ("czynnnosc %i \n",i);

 if (pipe(fd1)==-1 | pipe(fd2)==-1)

 {

 printf ("blad w pipe \n");

 }

 else

 {

 switch (pid=fork()) {

    case -1:

	printf ("error in fork\n");

	break;

    case 0:

        close(fd1[0]);

         ind=1;

         do

         {

         close(ind);

         close(1);

         }

         while ((ind=dup(fd1[1]))!=1);

         close(fd1[1]);


        close(fd2[1]); 

         ind=0;

         do

         {

         close(ind);

         close(0);

         }

         while ((ind=dup(fd2[0]))!=0);

         close(fd2[0]);         

         sleep (1);


        switch (i) {

         case 0:

         execlp("ps","-fx",0);

         printf ("nie wykonalem pierwszego kroku \n");

         break;         

         case 1:

         execlp("grep","'TTT'",0);

         printf ("nie wykonalem drugiego kroku \n");         

         break;

         case 2:

         execlp("wc","-l",0);

         printf ("nie wykonalem trzeciego kroku \n");         

         break;

         }

	break;

    default:

        close(fd1[1]);

        close(fd2[0]);        

        switch (i)

        {

        case 0:

        read (fd1[0],text1,1024);

        printf (text1);

        close(fd1[0]);

        close(fd2[1]);	        

        break;

        case 1:

        write (fd2[1],text1,1024);

        close(fd2[1]);	        

        read (fd1[0],text2,1024);        

        close(fd1[0]);        

        printf (text2);        

        break;

        case 2:

        write (fd2[1],text2,1024);

        close(fd2[1]);	                

        read (fd1[0],text3,1024); 

        close(fd1[0]);                       

        printf (text3);        

        break;

        }

	wait(0);

	break;

    }		

 }

 } 

}

// ---------------------------------------------------------------