zoukankan      html  css  js  c++  java
  • 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、匿名管道的实现:

    运行结果:

  • 相关阅读:
    洛谷 P1325 雷达安装 解题报告
    洛谷 P2184 贪婪大陆 解题报告
    洛谷 P3942 将军令 解题报告
    洛谷 P3698 [CQOI2017]小Q的棋盘 解题报告
    洛谷 P1436 棋盘分割 解题报告
    C++生成dump文件,调试dump文件
    判断机器大小端的两种实现方法
    判断机器大小端的两种实现方法
    Visual Studio 代码生成 运行时库的选择
    Visual Studio 代码生成 运行时库的选择
  • 原文地址:https://www.cnblogs.com/hanxiaoyu/p/5837435.html
Copyright © 2011-2022 走看看