• Linux


    一、概念:进程间通信( IPC,InterProcess Communication)

      每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进城之间要交换数据必须通过内核,

    在内核中 开辟一块缓冲区进程1把数据从用户空间拷到内核缓冲区,进程2再从内核缓冲区把数据读走,内接提供的这种机制成为进程间

    通信(IPC,InterProcess Communication)。

    二、管道

      管道分为匿名管道和命名管道,这里我们只讲匿名管道,命名管道的实现将在下一篇文章中分享。

      1、管道是一种最基本的IPC机制,有pipe函数创建:

        头文件#include <unistd.h>

        函数原型:int pipe ( int fileds[2] );

        返回值:调用成功返回0,调用失败返回-1.

         

        调用pipe函数时,在内核中开辟一块缓冲区(称为管道),用于通信,他有一个读端一个写端,然后通过fileds参数传出给用户

      程序两个文件描述符,fileds[0]指向管道的读端,fileds[1]指向管道的写端。所以管道在用户程序看起来就像一个打开的文件,通过

      read(fileds[0]);或write(fileds[1])向这个文件读写数据,其实是在读写内核缓冲区。

     

      2、管道实现进程间通信的过程:

      

        Step1:父进程调用pipe开辟管道,得到两个文件描述符指向管道的读端和写端;

        Step2:父进程调用fork函数创建子进程,那么子进程也有两个文件描述符指向同一管道的读端和写端;

        Step3:父进程关闭管道读端,子进程关闭管道写端。父进程就可以网管道里写数据,子进程可以从管道中读数据,管道适用

      缓刑队列实现的,数据从写端流入,从读端流出,这样就实现了进程间通信。

      3、匿名管道的特点(简称管道):

        (1)管道只支持单向通信。(要想父子进程间通信必须关闭相应的读、写端)

        (2)管道用于具有亲戚关系的进程间通信,常用于父子进程间通信。(子进程继承父进程的文件描述符表,所以可以指向同一管道,看到同一份数据)

        (3)管道依赖于文件系统。

        (4)管道的生命周期随进程的结束而结束。

        (5)面向字节流

        (6)管道内部提供同步互斥机制

      4、匿名管道的实现:

    运行结果:

  • 相关阅读:
    Spring Controller参数为空串的处理方式
    netstat用法
    zookeeper的配置项
    C++ Lambda表达式用法
    java命令行运行jar里的main类
    Random的nextInt用法
    【JAVA】删除某个目录及目录下的所有子目录和文件
    Centos7设置keepAlived开机自启动
    linux设置nginx开机自启动
    window.open()方法
  • 原文地址:https://www.cnblogs.com/hanxiaoyu/p/5837435.html
Copyright © 2020-2023  润新知