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

菜鸟提问,关于管道

    来源: 互联网  发布时间:2016-08-24

    本文导语:      int fd[2];   pid_t pid;   socketpair(AF_UNIX, SOCKET_STREAM, 0, fd);// 创建管道   if ( (pid = fork()) == 0) {// 子进程     close(fd[0]);// 关闭管道的父进程端     dup2(fd[1], STDOUT_FILENO);// 复制管道的子进程...

    int fd[2];
  pid_t pid;
  socketpair(AF_UNIX, SOCKET_STREAM, 0, fd);// 创建管道
  if ( (pid = fork()) == 0) {// 子进程
    close(fd[0]);// 关闭管道的父进程端
    dup2(fd[1], STDOUT_FILENO);// 复制管道的子进程端到标准输出
    dup2(fd[1], STDIN_FILENO);// 复制管道的子进程端到标准输入
    close(fd[1]);// 关闭已复制的读管道
    /* 使用exec执行命令 */
  } else {// 父进程
    close(fd[1]);// 关闭管道的子进程端
    /* 现在可在fd[0]中读写数据 */
    shutdown(fd[0], SHUT_WR);// 通知对端数据发送完毕
    /* 读取剩余数据 */
    close(fd[0]);// 关闭管道
    /* 使用wait系列函数等待子进程退出并取得退出代码 */
  }

我知道管道应该在一个进程关闭读端只写数据,另一个进程关闭写端只读数据。
有2个疑问:
  1,在执行exec后,子进程怎么取得管道句柄?(通过参数传递?还是在没有execclose后,怎么获得?)
  2,上面的代码为什么要把标准的输入输出复制到管道句柄,和问题1有关吗?

谢谢!!

|
dup2(fd[1], STDOUT_FILENO);
dup2(fd[1], STDIN_FILENO);
由于有了上面两句。
exec后的进程的标准输入和标准输出都是fd[1]了,只需要 read(0, ...), write(1, ...),
或者干脆fgets()/printf(),就是从fd[1]读/想fd[1]写

|
子进程会复制父进程的存储空间
也就是说你fork一个进程后,子进程有一个和父进程一样的变量的副本
它们值都和父进程的一样,直到你更改它

    
 
 

您可能感兴趣的文章:

  • 菜鸟问一个简单问题,关于管道和ls与cat
  • 菜鸟提问:包是什么概念?
  • 菜鸟提问:请问Unix下面有没有类似Win32下_T这样的宏?
  • 菜鸟提问,我怎么装redhat7。1
  • 菜鸟提问了,关于编译问题?
  • 菜鸟 提问
  • 菜鸟提问:送分题目(内容请进)
  • 菜鸟在线提问:有关弹出式菜单!
  • 菜鸟提问linux
  • 菜鸟我要提问了。关于编译的问题
  • 菜鸟提问:有关运行时错误
  • 菜鸟提问:gcc编译后为什么不能运行?
  • 菜鸟提问,请大虾帮助!!!
  • 菜鸟提问………
  • 菜鸟提问
  • 菜鸟提问:在Unix下如何象Windows一样抓屏?
  • 菜鸟提问。
  • 菜鸟再次提问!!!
  • 在linux下如何用gcc连接远端Oracle数据库?(菜鸟提问,大虾快答)
  • 菜鸟提问,送分机会来了.
  • 菜鸟提问:linux下的modem
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • ----菜菜鸟第三问:-菜鸟菜问:JAVA如何求 根号、开次方? -----
  • 菜鸟问一个关于j2ee的菜鸟问题
  • 怎样从一个菜鸟级的java programer升级到一个菜鸟级的java developer
  • 一个连菜鸟都算不上的菜鸟
  • 菜鸟求问菜鸟问题 ,域名绑定
  • ===菜鸟系列===:写过毕业论文的前辈请进!!!菜鸟散分啦!!!!
  • gcc问题---菜鸟发问之一,老大们帮忙啊!!菜鸟分不多,只好给这点了,对不起!!
  • 菜鸟又来问菜鸟问题了
  • 菜鸟的Linux练习疑问……
  • 菜鸟刚学jsp,还不知道怎么和sql server2000的数据库相连,我已经把odbc配好了,谁能给我一段和数据库相连的并显示所有数据的代码!菜鸟
  • 菜鸟写的俄罗斯方块,请多多批评!
  • 小问题,你一定能够帮忙!——菜鸟请求帮忙!!
  • 一个菜鸟的请求: 哪位前辈能给晚辈讲讲“匿名类”
  • ※菜鸟送分之一※ Red Hat Linux 的最高版本是多少?
  • 菜鸟问题:在Java中如何接收从键盘输入的字符串?
  • ★菜鸟问:怎么在RED HAT LINUX7.2中用169上网??
  • 菜鸟问题~~快点进来拿分
  • 菜鸟菜问题1
  • 如何解压光盘上的gz文件到某个目录?(Linux 超级菜鸟问题之一)
  • 菜鸟问题:如何在Solaris下配置显卡和显示器


  • 站内导航:


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

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

    浙ICP备11055608号-3