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

管道通信中的一个问题

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

    本文导语:     最近在学Linux下的通信机制,正好看到管道通信机制,先上网上的一段代码: if(pipe(pipe_fd)0)  //父进程写       {                  close(pipe_fd[READ]);                  strcpy(w_buf,"hello world!n");  ...

   最近在学Linux下的通信机制,正好看到管道通信机制,先上网上的一段代码:

if(pipe(pipe_fd)0)  //父进程写  
    {         
        close(pipe_fd[READ]);         
        strcpy(w_buf,"hello world!n");           
        if(write(pipe_fd[WRITE],w_buf,strlen(w_buf))==-1)         
            printf("parent write overn ");           
        close(pipe_fd[WRITE]);        
        printf("parent close fd[WRITE] over n");         
        sleep(10);   
    }     

    在上面的代码中,当父进程向管道里写数据时,先关闭管道的读端,当子进程向管道里读数据时,关闭管道的写端,问题时,比如父进程在写完时,关闭写端时,好像没有唤醒子进程哦,即读端刚才被关闭了,子进程一直在等待,现在父进程关闭了写端,却没有打开读端,那么子进程岂不是一直等待下去??同理,如果在fork之后,子进程先被调度运行,那么在父进程写之前,子进程就已经关闭了写端,那么管道里根本就没有数据呀???
    还有上面的代码中,在子进程读的那段代码里,sleep()语句是不是应该放在第一句,这样才能保证让父进程先做啊?
    关于上面的close,其实我是这样认为的,如果是关闭写端,就在关闭之前,先看看有没有进程在读端等待,如果有的话,就“打开”读端,唤醒等待的进程。。。如果关闭读端,就看看有没有进程在等待写,有则唤醒.....不知道这样理解的对不对.....很想看看 管道通信里的close()函数的实现,但不知道在哪里查询,各位知不知道有什么linux  下的api(能够提供具体实现的)??
      谢谢各位了....

|
fork() + 重定向 确实比较迷惑。


// 当 fork之后。产生了另外一个 进程。 
// 下面这句if 只有子进程执行。 父进程。因为 fork返回值 不是0  所以不会执行 if里面的语句
    if((pid=fork())==0) //子进程读        
    {     
 
        sleep(3);           //确保父进程关闭写端 《- 这里 用 sleep 并不是好办法 
        exit();           // 这一点很重要 。一定要让子进程 执行完之后 结束
    }     
    else if(pid>0)  //父进程写  
    {         
 
        sleep(10);   // 

    
 
 

您可能感兴趣的文章:

  • linux进程管道通信
  • linux 管道通信
  • 关于用管道流进行线程间通信的问题,在线急等!!(尽早结账!欢迎一招命中)
  • 为什么无名管道只能在具有亲缘关系的进程之间进行通信?
  • 守护进程和fork()以及管道通信的结合
  • 如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信?
  • 进程间通信---关于管道
  • 关于 fork 管道通信的疑问
  • 倾尽家财请教一个管道通信的简单问题!谢谢大家
  • linux进程间通信(管道)的问题
  • 多个线程用一个管道通信,不是异常就是无限等待,请指点。
  • 用无名管道实现进程通信,可是出错了,打击哦
  • linux进程间通信(命名管道)的问题
  • linux进程管道通信C语言编程:程序有问题,请指点迷津
  • 父子进程之间管道通信问题
  • 在用管道通信父子进程遇到问题
  • 利用双管道进行进程的数据通信
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。
  • Linux下管道通信出错
  • linux管道问题,管道建立后如何同步?
  • 串口和管道诡异的问题,在线急等解答
  • 多进程通讯的管道相关问题
  • 命名管道问题
  • 关于有名管道的权限问题?
  • 请教大家一个关于管道的问题
  • 日志写入命名管道的权限问题
  • 关于FIFO——命名管道的问题
  • 关于linux下管道的概念性问题
  • [Help]FIFO管道非阻塞通讯问题。。。
  • 多个进程同时写一个管道会不会有问题???
  • 求教一个简单的关于管道使用的问题,谢谢
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 1哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住???
  • (100)"断开的管道" 在Socket编程当中,如果我连续发送包,例如1000次,总会出现"断开的管道"的错误提示,请问如何解决
  • 管道(|)是怎么实现的?
  • 我用管道作为一个程序的标准输入时,程序报错说不是一个终端不能做为标准输入,请问怎么样管道成为它的标准输入呢???具体错误信息见内
  • 请问何时删除命名管道哪?
  • Linux下面的"匿名管道",是否对应着某种实体?
  • 请问如何让自己编写的Shell程序支持管道?
  • 命名管道open时被阻塞了
  • 如何实现管道和后台进程
  • 关于管道的用法
  • 创建了一个管道,写入数据正确,读数据失败。为什么?
  • 什么原因可以造成管道破裂?
  • 匿名管道的堵塞
  • 请教:ts流和数据管道有什么关系?急!
  • 菜鸟提问,关于管道
  • 管道可以将输出传给cp么
  • 管道?大家看看
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?


  • 站内导航:


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

    ©2012-2021,