void pipe_execute(char all[][MAX_SIZE],int i,int n)
{
if(i==n)
{
execute(all[i-1]);
}
else
{
int fd[2];
char cmd1[100];
pipe(fd);
pid_t pid = fork();
if(pid==0)
{
dup2(fd[1],fileno(stdout));
execute(all[i-1]);
}
else
{
wait(NULL);
dup2(fd[0],fileno(stdin));
pipe_execute(all,i+1,n);
}
}
}
void execute(char cmd[])
{
char *a = strtok(cmd," ");
char *b = strtok(NULL," ");
pid_t pid = fork();
if(pid==0)
execlp(a,a,b,(char*)NULL);
else
{
wait(NULL);
}
}
В этой программе предположим
все [0] = "LS"
все [1] = "Grep аа"
= 1
п = 2
Выполнение Grep не остановка после «grep a», может быть, она ждет какого-то особого символа, я пробовал все как «\ 0», «\ n», EOF и т. д., но это не сработало. Что я должен отправить в конец grep?Что я должен передавать как символ конца системным командам, таким как grep?
Вы должны закрыть все дескрипторы бродячих файлов. В общем, вы должны делать 'pipe (fd); if (fork() == 0) {close (fd [0]); dup2 (fd [1], 1); close (fd [1]) ... 'Если какой-либо из процессов все еще имеет конец записи для открытого канала,' grep' будет продолжать ждать ввода. –