linux的通信方式之匿名管道

    xiaoxiao2021-03-25  103

    (1)进程通信:进程之间是彼此独立的,为实现彼此独立的进程的通信,我们给他们分配一片公共的内存空间(公共区的提供者不同,通信方式也就不同)。

    (2)管道的特性

    a.管道通信是单向的

    b.匿名管道常用于父子进程的

    c.管道是面向字节流的(发送方发送的方式和接受方接收方式不要求一样,比如A一次发50个字节,可B可以一次接收5个,接收10次)

    d.管道的生命周期随进程

    e.管道自带同步机制

    (3)代码实现:

    #include<stdio.h>

    #include<unistd.h>

    #include<sys/types.h> #include<string.h> int main()    {  int pipef[2]={0,0}; // 0表示读(像圆圆的眼睛)1表示写(像我们的笔)   if( pipe(pipef)<0)   {  printf("pipe false");  exit(0);      }   else{  pid_t id=fork();  //fork()函数创建进程  if(id==0)              //子进程  {  char *buf="hello world\n";  close(pipef[0]);   //我们让子进程写,关掉管道的读  int count=5;  while(count--)  {  write(pipef[1],buf,strlen(buf));  sleep(1);  }  close(pipef[1]);  }  else  //父进程  {  close(pipef[1]);   //关闭了父进程的写   char buff[28]; while(1) {  ssize_t s= read(pipef[0],buff,sizeof(buff-1));      buff[s]='\0';  if(s>0)    printf("%s",buff);   if(s==0)  {  close(pipef[0]);  return;  } }  close(pipef[0]);   //使用完之后记得关闭管道读  }   } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-25397.html

    最新回复(0)