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的AA」
grep的第i = 1
n = 2的
執行不會在「grep a」之後停下來,可能是它正在等待一些特殊字符,我已經嘗試過所有類似'\ 0','\ n',EOF等但它不起作用。我應該發送什麼來結束grep?作爲結束字符傳遞給系統命令(如grep)應該如何傳遞?
您必須關閉所有的零散文件描述符。一般來說,你應該做'pipe(fd); if(fork()== 0){close(fd [0]); dup2(fd [1],1); close(fd [1])...'如果任何進程仍然打開管道的寫入結束,'grep'將繼續等待輸入。 –