• 管道


      管道是 linux下支持的最初的IPC形式之一,管道是半双工的,数据只可以想一个方向流动;如果要双向流动的话,需要建立两个管道;

        一:无名管道:

          无名管道定是死的,pipe()函数返回的是一个二维数组类型,【0】端固定是读端,【1】端是写端;

          代码:

            

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <signal.h>
      4 
      5 int main()
      6 {
      7     int fd[2];
      8     //
      9     int ret =pipe(fd);
     10     if(ret < 0)
     11     {
     12         perror("pipe!
    ");
     13         exit(EXIT_FAILURE);
     14     }
     15 
     16     int pid = fork();
     17     if(pid <0)
     18     {
     19         perror("fork!
    ");
     20         exit(EXIT_FAILURE);
     21     }
     22     if(pid ==0)
     23     {
     24         write(fd[1],"hello this child_process write!
    ",40);
     25     }
     26     if(pid >0)
     27     {
     28         sleep(3);
     29         char buff[40];
     30         read(fd[0],buff,40);
     31         printf("buff is %s
    ",buff);
     32     }
     33 
     34     return 0;
     35 
     36 
     37 }
     38 
     39 

      其中是,创建一个子进程,在子进程读,在父进程中来写;

    二.有名管道:

        

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #include <signal.h>
      4 #include <fcntl.h>
      5   
      6 int main()
      7 { 
      8     //
      9     //int ret = mkfifo("myfifo",0644);
     10     //if(ret < 0)
     11     //{ 
     12     //  perror("pipe!
    ");
     13     //  exit(EXIT_FAILURE);
     14     //} 
     15  
     16     int fd=open("myfifo",O_RDWR);
     17     if(fd < 0)
     18     {
     19         perror("open!
    ");
     20         exit(EXIT_FAILURE);
     21     }   
     22             
     23     int ret=write(fd,"hello this is write!
    ",40);
     24     if(ret < 0)
     25     {   
     26         perror("write!
    ");
     27         exit(EXIT_FAILURE);
     28     }   
     29  
     30     char buff[40];
     31     ret=read(fd,buff,40);
     32     if(ret < 0)
     33     {       
     34         perror("open
    ");
     35         exit(EXIT_FAILURE);
     36     }
     37  
     38     printf("buff is %s
    ",buff);
     39     close(fd);
     40     return 0;
     41    
     42  
     43 }

      有名管道就是通过mkfifo开创建一个管道文件,对文件来读写操作;

      

  • 相关阅读:
    VS自带的dbghelp.h文件 报错
    Windows 自带的截屏功能
    CentOS 7 安装
    Windows 远程连接 CentOS 7 图形化桌面
    <<、|=、&的小例子
    pip 安装库过慢
    pip -i 和 -U 参数
    windows下安装TA-Lib库
    vector、map 判断某元素是否存在、查找指定元素
    vector push_back报错
  • 原文地址:https://www.cnblogs.com/hongzhunzhun/p/4570211.html
Copyright © 2020-2023  润新知