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

跪求大虾指点...进程通信

    来源: 互联网  发布时间:2016-11-29

    本文导语:  使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管...

使用系统调用pipe( )建立一个管道,然后使用系统调用fork( )创建2个子进程p1和p2。这2个子进程分别向管道中写入字符串:“Child process p1 is sending message!”和“Child process p2 is sending message!”,而父进程则从管道中读出来自两个子进程的信息


#include 
void main( )
{ int i, r, p1, p2, fd[2];
  char buf[50], s[50];
  pipe(fd);  /* 父进程建立管道 */
  while ((p1=fork())==-1);  /* 创建子进程P1,失败时循环 */
  if (p1==0)  /* 由子进程P1返回,执行子进程P1 */
  { lockf(fd[1], 1, 0);  /* 加锁锁定写入端 */
    sprintf(buf, "Child process P1 is sending messages! n");
    printf("Child process P1! n");
    write(fd[1], buf, 50);  /* 把buf中的50个字符写入管道 */
    sleep(5);  /* 睡眠5秒 */
    lockf(fd[1], 0, 0);  /* 释放管道写入端 */
    exit(0);  /* 关闭P1*/
  }
   else  /* 从父进程返回,执行父进程 */
  { while ((p2=fork())==-1);  /* 创建子进程P2,失败时循环 */
    if (p2==0)  /* 从子进程P2返回,执行子进程P2 */
    { lockf(fd[1], 1, 0);  /* 锁定写入端 */
      sprintf(buf, "Child process P2 is sending messages! n");
      printf("Child process P2! n");
      write(fd[1], buf, 50);  /* 把buf中的字符写入管道 */
      sleep(5);  /* 睡眠5秒 */
      lockf(fd[1], 0, 0);  /* 释放管道写入端 */
      exit(0);  /* 关闭P2*/
    }
    wait(0);
    if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
    else printf("%s", s);
    wait(0);
    if ((r=read(fd[0], s, 50))== -1) printf("cannot read pipe! n");
    else printf("%s", s);
    exit(0);
  }




结果是如下:
Child process P1!
Child process P1 is sending messages! 
然后就一直等待,不会执行进程p2....不会结束....跪求大虾指点啊

|
哦 我用这个程序是可以的
输出
Child process P1! 
Child process P2! 
Child process P1 is sending messages! 
Child process P2 is sending messages! 

    
 
 

您可能感兴趣的文章:

  • 为什么不能运行这些命令?请各位大虾指点指点
  • 十万火急 ... ... 请各位大虾都来指点指点,分无穷多,up也给分,进来看看吧!
  • weblogic6.1发布servlet的问题,本着提携后进的精神,请各位大虾指点指点!
  • 哪位大虾指点一下哪里有weblogic下载啊???
  • 最近在网上经常看到WinAll这个词,这是个什么东东,一种操作系统吗?请大虾指点,多谢!
  • 8M改为16M的sdram需要在linux驱动中怎么改呢?(大虾请指点)
  • 菜鸟求救:在linux下安装jdk失败。初次使用linux,还请各路大虾指点指点,不甚感激!!!
  • 请有经验的大虾指点一下!!!!!!、、、、、、、100分!!
  • 大虾指点 LIUNX 学开发还是学主机维护。。??[
  • 关于安装VMware Tools 的问题,请各位大虾指点!!
  • 想搞一下windows以外的操作系统,不知道Unix和Linux那个好一点,那个有前途,请大虾指点
  • 菜鸟问软件配置问题,希望各位大虾指点
  • 一个菜鸟提的问题,请各位大虾指点,急哦!!!
  • Linux分区问题,烦请大虾指点*_*!
  • 今天在线,哪位大虾来指点,高分回报,不够再发帖补....
  • 跪求大虾指点为何VIVI进不去呢
  • Unix与Windows的困惑,希望得到各位大虾的指点
  • 一个电子商务网站的内部人员信息管理是指???请各位大虾指点???
  • 要死人了!!!!!求求各位大虾指点指点啊!!!!!!!!
  • 仅有50分了,请大虾指点如何获取出错信息?
  • 父进程sleep(10) 秒,但不需要子进程执行这句代码,怎么办,求大虾指导
  • 请问大虾们,同一串口能否被多个进程同时操作?
  • 大虾们帮个忙吧。linux下可否有类似WaitForSingleObject的等待进程执行完毕的函数呢?
  • 大虾们,怎么结束进程啊
  • 各位大虾,已经知道某个进程的名字,如何对其内存地址进行改写?
  • 请问大虾,linux中取系统当前CPU和内存的使用信息及进程数的api是啥?急急.....
  • 进程问题,有系统开发或分析经验的大虾请进来帮帮我!!!
  • 大虾,怎么用gdb调试多进程程序啊?
  • 有关进程,信号的问题,向各位大虾求教。。。
  • ~◎大虾们,在linux下怎么得到一个进程的cpu mem的使用情况,用从c/c++程序!
  • 请教各位大虾一个关于进程间通信的程序问题!
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位大虾,小弟有一事不明,请大虾赐教!
  • 在solaris下如何卸载wu-ftpd???????????????????????谢谢大虾!!!!!!!!!!
  • 请大虾们谈谈linux和unix的异同吧
  • 请大虾,详细介绍一下JavaBean的写法,和调用过程!
  • 对LDAP有研究的大虾请进,见者有分
  • 超级新手菜鸟请问各位大虾!
  • 各位大虾,一个初学者该怎样开始学习java?
  • 请问各位大虾,什么地方有Jsp学习资料?
  • 哪位大虾知道weblogic与websphere的差别?
  • 大虾救命!APACHE没有理睬JSP?!!!
  • 请问各位大虾,如何把一个String赋值给一个Char[]??
  • 大虾救命啊!!!50分!!!
  • 请问各位unix大虾,哪有免费的unix下载?
  • 初学者求救!!哪位大虾给点源代码?
  • 在下初学java,请各位大虾推荐几个java学习网站吧!
  • 请各位大虾介绍几个好一点的linux论坛,谢谢!
  • 大虾救命,dos下面怎么输入中文?
  • 请问大虾们,如何学习linux?
  • session里面可以放整型数吗?大虾请指教!!!
  • 各位大虾!如果用jbuilder做一个五子棋?


  • 站内导航:


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

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

    浙ICP备11055608号-3