C中的多进程Shell,使用Pipes[Linux]



我正试图用C编写一个shell,它支持多管道进程处理,这取决于用户给定的单独进程的数量,每个进程之间用一个"象征shell将进程数量分叉到每个进程的一个子进程中。

这里有一个例子:

texto1.txt = "Isto é o Texto 1"
$ cat texto1.txt | grep -c Isto 

结果:1

但我在孩子之间的沟通以及最终与父母的沟通过程中遇到了困难。

以下是我的execpipe函数的当前代码,它执行管道过程,argv1argv2是用户输入给出的两个独立过程:(示例:ls -l | wc -l(

int execpipe(char ** argv1, char  ** argv2)
{
int fds[2];
pipe(fds);
int i;
pid_t p1, p2;
p1 = fork();
if (p1 == -1)
{ // error
char * error = strerror(errno);
printf("error fork!!n");
return 1;
}
if (p1 == 0)
{ // child process
close(fds[0]);
dup2(fds[1], STDOUT_FILENO);
close(fds[1]);
if(execvp(argv1[0], argv1)<0){ // run command AFTER pipe character in userinput
char * error = strerror(errno);
printf("unknown commandn");
return 0;
}
}
else
{ // parent process
p2 = fork();
if(p2==0){
close(fds[1]);
dup2(fds[0], STDIN_FILENO);
close(fds[0]);
if(execvp(argv2[0], argv2)<0){ // run command AFTER pipe character in userinput
char * error = strerror(errno);
printf("unknown commandn");
return 0;
}
}else{ //Parent waits for both of it's children
wait(NULL);
wait(NULL);
}
}
}

必须关闭管道的写入端,以指示第二个不再有数据的进程:

}
}else{ //Parent waits for both of it's children
close(fds[1]); // ++ add this line
wait(NULL);
wait(NULL);
}

小提示:代替

char * error = strerror(errno);
printf("error fork!!n");

为什么不

perror("fork");

相关内容

  • 没有找到相关文章

最新更新