加入收藏 | 设为首页 | 会员中心 | 我要投稿 我爱制作网_池州站长网 (https://www.0566zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

【UNIX】进程间通信

发布时间:2022-11-10 12:47:42 所属栏目:Unix 来源:
导读:  Linux继承了AT&T和BSD以及早期的进程间的通信

  一般常用的通信方式有:

  1)传统的通信方式:无名管道,有名管道和信号。

  2)对于SYS 5 的进程间通信采用了共享内存,消息队列和信号灯的形
  Linux继承了AT&T和BSD以及早期的进程间的通信
 
  一般常用的通信方式有:
 
  1)传统的通信方式:无名管道,有名管道和信号。
 
  2)对于SYS 5 的进程间通信采用了共享内存,消息队列和信号灯的形式。
 
  3)BSD,对于一般网络间的通信采用来套接字的方式实现。
 
  1)无名管道的机制以及创建
 
  对于无名管道只是用于父子进程之间的通信,采用的是半双工的方式读写操作的,这里内核系统以及默认在无名管道了fd[0]是管道的读端fd[1]是管道的写端
 
  对于管道可以看成是一种特殊的文件,管道是基于特殊的文件描述符的通信方式,对于他的读写尅使用read和write函数来实现。
 
  1)对于管道的创建以及读写函数unix进程通信,如下:
      
  #define N 20
  int pid1,pid2;
  int main ()
  {
   int fd[2];                  //这里的管道两端系统默认读写的
   char ch1[N] = "hello kitty";
   char ch2[N] = "hello world";
   char output[40];
  
   pipe(fd);
   while((pid1 = fork()) == -1);
   if(pid1 == 0){
  
   write(fd[1],ch1,N);
   sleep(5);
  //   close(fd[0]);
   return 0;
   }else{
   while((pid2 = fork()) == -1);
   if (pid2 == 0){
  
   write(fd[1],ch2,N);
   sleep(5);
  // close(fd[0]);
  
   }else{
  
   read(fd[0],output,40);
   printf("this is pid1 = %s\n",output);
   read(fd[0],output,40);
   printf("this is pid2 = %s\n",output);
   return 0;
  
   }
   }
   return 0;
  
  }        

  2)管道的读写应该注意的:
 
  ①当管道中午数据写入时,读端会一直处于阻塞状态,
 
  ②向管道写出具的时候,Linux不会保持院子特性,若果管道中有闲着空间时,写进程会试图向管道写入数据,如果读进程不读走管道缓冲区的数据,那么写操作会一直阻塞
 
  ⑶只有读端存在时,写数据才有意义
 

(编辑:我爱制作网_池州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章