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

一个简单的管道通信程序

    来源: 互联网  发布时间:2017-04-29

    本文导语:  部分代码: char parent[]={"A message from parent"}; char child[]={"A message from child"}; int main()  {   int chan1[2],chan2[2];   char buf[100];   if(pipe(chan1)==-1||pipe(chan2)==-1)   {     perror("pipe error");     exit(1);   }   if(fork()) ...

部分代码:
char parent[]={"A message from parent"};
char child[]={"A message from child"};
int main() 
{
  int chan1[2],chan2[2];
  char buf[100];
  if(pipe(chan1)==-1||pipe(chan2)==-1)
  {
    perror("pipe error");
    exit(1);
  }
  if(fork())
  {
     close(chan1[0]);
     close(chan2[1]);
     write(chan1[1],parent,sizeof parent);
     close (chan1[1]);
     read(chan2[0],buf,100);
     printf("parent process:%sn",buf);
     close(chan2[0]);
     printf("%dn",getpid());
  }
  else
  {
     close(chan1[1]);
     close(chan2[0]);
     read(chan1[0],buf,100);
     printf("child process:%s n",buf);
     write(chan2[1],child,sizeof child);
     close(chan2[1]);
     close(chan1[0]);
     printf("%dn",getpid());
  }
  return 0;
}
问题有二:
1、if(fork())语句判断的什么?不是判断fork()是否等于0吗?为什么if(fork())运行的是父进程,else运行的是子进程?
2、结果是else里的子进程先运行的,为什么读取chan[0]的时候,输出的是还没运行的父进程中写入的字符串?

|
fork()后父子进程执行顺序的不确定性。。用vfork()吧!

    
 
 

您可能感兴趣的文章:

  • linux进程管道通信
  • linux 管道通信
  • 关于用管道流进行线程间通信的问题,在线急等!!(尽早结账!欢迎一招命中)
  • 为什么无名管道只能在具有亲缘关系的进程之间进行通信?
  • 守护进程和fork()以及管道通信的结合
  • 如何使用有名管道或者共享内存技术实现虚拟机与主机之间的通信?
  • 进程间通信---关于管道
  • 关于 fork 管道通信的疑问
  • 倾尽家财请教一个管道通信的简单问题!谢谢大家
  • 管道通信中的一个问题
  • linux进程间通信(管道)的问题
  • 多个线程用一个管道通信,不是异常就是无限等待,请指点。
  • 用无名管道实现进程通信,可是出错了,打击哦
  • linux进程间通信(命名管道)的问题
  • linux进程管道通信C语言编程:程序有问题,请指点迷津
  • 父子进程之间管道通信问题
  • 在用管道通信父子进程遇到问题
  • 利用双管道进行进程的数据通信
  • 求命名管道FIFO编写两个程序,实现通信,简单聊天功能。
  • Linux下管道通信出错
  • 我用管道作为一个程序的标准输入时,程序报错说不是一个终端不能做为标准输入,请问怎么样管道成为它的标准输入呢???具体错误信息见内
  • 客户端程序和服务器程序间能否通过管道来实现数据的双向传递啊?
  • 请问如何让自己编写的Shell程序支持管道?
  • gcc程序怎么不能将输出重定向到文件或管道呀,你们有这个问题吗?
  • 这是一个关于Linux的管道的程序,请问一下这个程序是什么意思,能不能解释一下
  • 管道程序中write(STDOUT_FILENO,line,n)是什么意思呢?
  • 一个写管道程序问题
  • 请大家帮我看看这个管道的程序.为什么有错误呢.奇怪.
  • 大家帮忙分析一下程序在哪个地方出了错?管道应用实例.
  • linux下管道程序求解
  • linux c语言编程 ------管道问题-----程序无法通过---求帮助
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux管道问题,管道建立后如何同步?
  • 哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 1哪位大侠知道Linux里的有名管道传送数据快不快?有名管道操作的过程是否有读写硬盘的操作?
  • 怎么样以非阻塞的方式从管道中读取数据?因为我用read函数时,如果管道没有数据就会阻塞住???
  • (100)"断开的管道" 在Socket编程当中,如果我连续发送包,例如1000次,总会出现"断开的管道"的错误提示,请问如何解决
  • 管道(|)是怎么实现的?
  • 多进程通讯的管道相关问题
  • 请问何时删除命名管道哪?
  • Linux下面的"匿名管道",是否对应着某种实体?
  • 倾尽家财请教一个管道通信的简单问题!谢谢大家 iis7站长之家
  • 命名管道open时被阻塞了
  • 如何实现管道和后台进程
  • 关于有名管道的权限问题?
  • 命名管道问题
  • 关于管道的用法
  • 请教大家一个关于管道的问题
  • 创建了一个管道,写入数据正确,读数据失败。为什么?
  • 什么原因可以造成管道破裂?
  • 匿名管道的堵塞
  • 请教:ts流和数据管道有什么关系?急!


  • 站内导航:


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

    ©2012-2021,