当前位置: 技术问答>linux和unix
关于pipe
来源: 互联网 发布时间:2016-06-05
本文导语: 自己要做个一shell,并且要有管道的功能 比如ls | wc这样的需要pipe之后fork 可是要是实验ls | wc | wc这样可以建立多个管道的功能需要pipe几次? 是有几个 "|" 就pipe几次?还是只需要pipe一次,然后通过多次fork就可...
自己要做个一shell,并且要有管道的功能
比如ls | wc这样的需要pipe之后fork
可是要是实验ls | wc | wc这样可以建立多个管道的功能需要pipe几次?
是有几个 "|" 就pipe几次?还是只需要pipe一次,然后通过多次fork就可以实现了?
比如ls | wc这样的需要pipe之后fork
可是要是实验ls | wc | wc这样可以建立多个管道的功能需要pipe几次?
是有几个 "|" 就pipe几次?还是只需要pipe一次,然后通过多次fork就可以实现了?
|
貌似大致如下:
#include
int fd[2];
void run_ls()
{
close(fd[0]);
close(fd[1]);
execve("/bin/ls", NULL, NULL);
}
void run_wc()
{
close(fd[0]);
close(fd[1]);
execve("/usr/bin/wc", NULL, NULL);
}
int main()
{
pipe(fd);
if (fork() > 0) {
dup2(fd[1], 1);
run_ls();
}
else {
dup2(fd[0], 0);
close(fd[0]);
close(fd[1]);
pipe(fd);
if (fork() > 0) {
dup2(fd[1], 1);
run_wc();
}
else {
dup2(fd[0], 0);
run_wc();
}
}
return 0;
}
|
the design of unix operating system
上有讲,就是把 read到 数据重新write,对象可能是终端,可能是 文件描述符?
不知道对不?
|
继续,在else
run_wc();
在里面fork
run_wc();
在里面fork
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。