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;
}
}
}
}
// ---------------------------------------------------------------