我目前正致力于为我的shell实现管道。我当前的管道实现适用于单个管道(A | B),但不适用于多个管道(A | B | C)。
示例:“ls | grep'p'| wc” 在这种情况下,第二个输出不会将其输出重定向到wc命令。有小费吗?
int fd[2];
pipe(fd);
int fd_past = 0;
//commands are in A1 -> process -> Tokens
while(A1->process != NULL) {
child = fork();
if (child == 0) {
dup2(fd_past,0);
close(fd[0]);
dup2(fd[1], 1);
Execute(A1->process->tokenCount, A1->process->Tokens);
} else {
close(fd[1]);
//save input for next command
fd_past = fd[0];
}
A1->process = A1->process->next;
}