[C]interpreter polecen. Przekierowanie grep wzorzec t.txt | grep wzorzec2

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Urb
Piegowaty Guziec
Piegowaty Guziec
Posty: 1
Rejestracja: 19 sty 2009, 18:23
Płeć: Mężczyzna
Wersja Ubuntu: 8.04
Środowisko graficzne: GNOME

[C]interpreter polecen. Przekierowanie grep wzorzec t.txt | grep wzorzec2

Post autor: Urb »

Witam serdecznie.
Piszę prosty interpreter poleceń w C i utknołem na poleceniu które jest widoczne w tytule, a mianowicie
grep wzorzec1 t.txt | grep wzorzec2.
Do wywołania funkcji grep używam polecenia execlp(); Pierwszy grep wykonuję w procesie macierzystym zaś drugi w potomnym. Komunikuje się pomiędzy procesami za pomocą łącza oraz używam funkcji dup2() do podmienienia standardowego wejaścia/wyjścia tych funkcji. Zamieszczę fragment kodu, który może przybliży wam problem.

Kod: Zaznacz cały

 pipe(fd1);
 pid1=fork();
 if (pid1==-1) return 1;
 if (pid1==0)
 { 
   close(fd1[0]);
   dup2(fd1[1],STDOUT_FILENO);
   switch (a1){
    case 1 : execlp(pol1,pol1,NULL);
           break;
    case 2 : execlp(pol1,pol1,arg1[0],NULL);
            
           break;        
    case 3:  execlp(pol1,pol1,arg1[0],arg1[1], NULL);
           break;
    case 4 : execlp(pol1,pol1,arg1[0],arg1[1],arg1[2],NULL);
           break;
    case 5 : execlp(pol1,pol1,arg1[0],arg1[1],arg1[2],arg1[3],NULL);         
           break;
    case 6 : execlp(pol1,pol1,arg1[0],arg1[1],arg1[2],arg1[3],arg1[4],NULL);
           break;
    }
   wait();
 }else{
        close(fd1[1]);
	dup2(fd1[0],STDIN_FILENO);
	switch (a2){
         case 0 : execlp(pol2,pol2,NULL);
	          break;
         case 1 : execlp(pol2,pol2,arg2[0],NULL);
                  break;        
         case 2 : execlp(pol2,pol2,arg2[0],arg2[1],NULL);
                  break;
         case 3 : execlp(pol2,pol2,arg2[0],arg2[1],arg2[2],NULL);
                  break;
         case 4 : execlp(pol2,pol2,arg2[0],arg2[1],arg2[2],arg2[3],NULL);
                  break;
         case 5 : execlp(pol2,pol2,arg2[0],arg2[1],arg2[2],arg2[3],arg2[4],NULL);
                  break;
        }
	
     }
Dlaczego wyniku pierwszego grepu nie przekierowuje do wejścia drugiego? Może mam zapisać to co było w łączu do pliku txt i wywołać drugiego grepa z argumentem jako scierzka do pliku? Jezeli macie pomysł na rozwiązanie tego problemu w inny sposób bardzo chętnie odejdę od mojej koncepcji...
Pozdrawiam.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 11 gości