zoukankan      html  css  js  c++  java
  • 进程间通信(IPC)-管道、匿名管道

         每个进程都有各自的地址空间,任何一个进程的全局变量在另一个进程中都看不到 所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读出,内核提供的这种机制称为进程间通信。

    管道:基本的IPC机制由int pipe(filedes[2])函数创建,调用函数在内核开辟一段缓冲区(管道)用于通信,它有一个读端一个写端,然后 通 过filedes参数传出给用户程序两个文件描述符,filedes[0]指向管道的读端,filedes[1]指向管道的写端,管道从用户角度看相当于打开一个文件,向文件读写数据其实是在读写内核缓冲区。

     

    管道的读写端需要打开文件描述符来传递,所以进程需要从公共祖先哪里继承文件描述符,所以通过管道通信需要有血缘关系。

    进程通过管道只能单向通信,有时需要父进程读,子进程写,有时需要子进程读,父进程写这就需要重新开管道。

     管道:

    命名管道

    文件系统中路径名是全局的,每个进程都可以访问,可以用文件系统中的路径名来标识一个IPC通道

    创建FIFO文件函数

    int mkfifo(const char *filename, mode_t mode);

    匿名管道:

    fifo写端

    fifo读端:

    管道的容量

    当管道一端不断地读取数据,另一端却不输出数据。根据linux的实现机制当管道读满是输出端自动阻塞。所以这个管道是有大小的

    现在我们编写程序来测试管道的大小

     当i=16的时候会阻塞,可知管道大小为64k

  • 相关阅读:
    在过滤器中验证接口中的Token
    导出EXCEL的 两个方法
    调用webservice接口,返回xml(String)转义
    时间类的操作
    jvm 内存解析以及jvm调优
    redis springMVC 配置与应用
    题目2 成绩排序
    题目1 排序
    题目1042:Coincidence
    题目1131:合唱队形
  • 原文地址:https://www.cnblogs.com/Blog-day/p/My_Blog_Days_22.html
Copyright © 2011-2022 走看看