当前位置:  技术问答>linux和unix

如何实现shell的管道功能,如 ls | wc | wc 这样的命令

    来源: 互联网  发布时间:2017-01-10

    本文导语:  比如ls | wc可以通过以下代码实现  #include   int fd[2];  void run_ls()  {        dup2(fd[1],1);      close(fd[0]);      close(fd[1]);      execve("/bin/ls",NULL,NULL);  }  void run_wc()  {        dup2(fd[0],0);      close(fd[0...

比如ls | wc可以通过以下代码实现 
#include  

int fd[2]; 
void run_ls() 

      dup2(fd[1],1); 
    close(fd[0]); 
    close(fd[1]); 
    execve("/bin/ls",NULL,NULL); 

void run_wc() 

      dup2(fd[0],0); 
    close(fd[0]); 
    close(fd[1]); 
    execve("/usr/bin/wc",NULL,NULL); 

int main() 

    pipe(fd); 
    if(fork()==0) 
        run_ls(); 
    else 
        run_wc(); 
    return 0; 


ls | wc | wc如何实现呢? 

|
貌似大致如下:

#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;
}

|

|
不还是一样吗? 你把ls看成一部分,把wc | wc看成另一部分; wc | wc再分解一下不就行了吗?

就是算a + b与算a + b + c的区别

    
 
 

您可能感兴趣的文章:

  • 管道(|)是怎么实现的?
  • 如何实现管道和后台进程
  • 请问,pipe()这个管道建立函数在哪里实现的?
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?
  • 如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信?
  • 那位知道无名管道是如何实现的?
  • 利用管道实现sudo命令免输入密码的方法
  • 用无名管道实现进程通信,可是出错了,打击哦
  • 初学管道实现时的阻塞问题~
  • UNIX下利用管道重定向实现对程序的输出进行操作
  • linux中通过管道实现qq的聊天功能,用到了线程
  • 如何用命名管道(FIFO)实现非阻塞模式进程间通讯(IPC)?
  • 怎样模拟键盘给其他程序输入,用管道重定向怎么实现
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。
  • Linux线程间可否用管道通讯,如何实现?
  • linux下grep命令实现查找多个关键字(与关系和或关系)
  • java怎样实现 运行dos命令行的命令或者windows的程序
  • 在linux下如何编程实现nslookup命令实现的IP地址和域名互相转换的功能?
  • Linux 下的cd命令为什么要实现成shell的内建命令
  • 自己实现linux下的ftp客户端,先用port命令后用append命令,报告错误425请问是哪里错了?,应该把模式置为pasv嘛??
  • 如何实现在接收到远程的命令后格式化磁盘?
  • 用FTP命令实现文件拷贝并改名
  • tac命令的实现?
  • 请问一下dd命令的实现机制,哪里能看到
  • ★★在自己编写的shell程序中,如何实现命令补全?
  • 类似于Shell界面下setup命令的文本模式菜单用C语言如何实现
  • 求教各位大大:关于vi或top命令出现的界面,如何编程才能实现?
  • grep命令的实现
  • 怎样实现命令的快捷方式`
  • 请问,在Cramfs文件系统中怎样实现历史命令记录
  • 开发板运行交互式网页,控件包含linux命令,用什么方法实现?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 通过javascript库JQuery实现页面跳转功能代码
  • 我想把csdn的论坛改成一个软件平台,另外增加数据查询功能,聊天功能,不知怎样实现比较好?我想用jbuider 7+SQL server实现,不知如何?
  • 我想定义一个宏来实现文中功能,但是不知道我说的功能到底可不可以实现 iis7站长之家
  • 我想做linux下的还原备份,实现与还原精灵虚拟还原等一样的功能,应该怎么做?另外现在有实现这种功能的成熟产品是哪一种?
  • struts+spring+hibernate+jquery实现分页功能的几个基本类介绍(异步加载)
  • 我想定义一个宏来实现文中功能,但是不知道我说的功能到底可不可以实现
  • Andriod UI中viewFlow实现仿淘宝的自动播放功能
  • 请问在linux下面,有没有硬盘整理的功能,或者有什么软件可以实现硬盘整理的功能?
  • 要实现无线功能部分,是单独写一个驱动,还是在原有驱动上扩充无线功能,哪个简单点?
  • Linux和Unix相对WIN、NETWARE有什么好处?他们之间有什么区别?WIN、NETWARE能实现的功能LINUX和UNIX能实现吗?
  • S3C2410按键驱动功能实现
  • java编程可实现一些什么样的功能?
  • 利用文件系统过滤驱动实现 类似还原卡功能 的原理是什么?
  • 请问shell能实现注册的功能吗?
  • 用KJAVA实现A6288一个功能的问题
  • 求录音机暂停功能的实现
  • 怎样实现这个功能,大家都看看。。。
  • 要做一个在applet,实现可以托拽的图形(比如长方形和线段等)?那位高手有资料?或者有没有java的第三方类库实现此功能?
  • 如何用c实现自动的telnet功能
  • 如何实现类似PHP.PB等语言中eval的函数功能?
  • java中如何实现拖拉的功能?
  • 通过javascript实现DIV居中,兼容各浏览器版本
  • socket实现多文件并发传输,求助多线程实现问题?
  • Python GUI编程:tkinter实现一个窗口并居中代码
  • interface 到底有什么用???实现接口,怎么实现??
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 怎么用Jsp实现在页面实现树型结构?
  • php实现socket实现客户端和服务端数据通信源代码
  • windows 下的PortTunnel 在linux下怎么实现?或者相应的已经实现的软件?端口映射
  • flash AS3反射实现(describeType和getDefinitionByName)
  • 网站重定向用C语言实现iptables,ACL实现


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3