深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

白马负金羁 白马负金羁     2022-12-11     399

关键词:

在Linux下的多个进程间的通信机制叫做IPC(Inter-Process Communication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用shared memory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包括如何使用Anonymous shared memory,以及如何使用信号量来进行同步等。Shared memory允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种IPC机制。本文中的代码都在Ubuntu系统上实现。
 

一、Anonymous shared memory

匿名映射前面提到过,有兴趣的读者还可以参考【1】来了解更多。在Linux中有两种创建anonymous mappings的方法:

  • specify MAP_ANONYMOUS flag and pass -1 for fd
addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0); 
if (addr == MAP_FAILED)
    exit(EXIT_FAILURE);  
  • open /dev/zero and pass this opened fd (this method is typically used on systems like BSD, that do not have MAP_ANONYMOUS flag)
fd = open("/dev/zero", O_RDWR);   
addr = mmap(NULL, length, PROT_READ | PROT_WRITE, MAP_PRIVATE,

深入详解linux进程间通信之共享内存(sharedmemory)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用pipe、sharedmemory、unixdomainsocket进行IPC的方法。彼时,我们的重点在于unixdomainsocket。因此,... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用sharedmemory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用sharedmemory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包... 查看详情

深入详解linux进程间通信之共享内存(sharedmemory)+信号量同步(代码片段)

在Linux下的多个进程间的通信机制叫做IPC(Inter-ProcessCommunication),它是多个进程之间相互沟通的一种方法。专栏前面的文章中演示过使用sharedmemory进行IPC的方法。本文将更进一步探讨Linux进程间通过共享内容进行通信的方法,包... 查看详情

[linux]进程间通信之共享内存

在上篇博文我们了解了通过管道完成进程间通信,我们了解匿名管道和命名管道,并且通过编码模拟实现使用了匿名管道和命名管道。我们知道要让进程间完成通信必须让这两个进程首先看到同一份资源,因此给予这个前提,本... 查看详情

linux之进程间通信(代码片段)

进程间通信文章目录进程间通信进程间通信的目的进程间通信分类管道什么是管道匿名管道pipe函数用fork来共享管道原理站在文件描述符角度理解管道管道读写规则管道的特性命名管道systemV共享内存共享内存的基本原理申请共享... 查看详情

[os-linux]详解linux的进程间通信2------systemv共享内存(sharedmemory)(代码片段)

本文详解了通过共享内存进行进程间通信的方法,并对消息队列,信号量做了简单介绍。另一种进程间通信--管道,见前文:[OS-Linux]详解Linux的进程间通信1------管道_RMA515T的博客-CSDN博客管道通信本质是基于文件&#x... 查看详情

[os-linux]详解linux的进程间通信2------systemv共享内存(sharedmemory)(代码片段)

本文详解了通过共享内存进行进程间通信的方法,并对消息队列,信号量做了简单介绍。另一种进程间通信--管道,见前文:[OS-Linux]详解Linux的进程间通信1------管道_RMA515T的博客-CSDN博客管道通信本质是基于文件&#x... 查看详情

[os-linux]详解linux的进程间通信2------systemv共享内存(sharedmemory)(代码片段)

本文详解了通过共享内存进行进程间通信的方法,并对消息队列,信号量做了简单介绍。另一种进程间通信--管道,见前文:[OS-Linux]详解Linux的进程间通信1------管道_RMA515T的博客-CSDN博客管道通信本质是基于文件&#x... 查看详情

进程间通信之共享内存(代码片段)

目录一.共享内存实现进程间通信的原理二.管理共享内存的数据结构三.共享内存函数四.实现进程间通信接博客:进程间通信之管道一.共享内存实现进程间通信的原理    共享内存实际是操作系统在实际物理内存中开辟的一... 查看详情

[linux]详解linux进程间通信(代码片段)

目录前言1.进程间通信的目的2.进程间通信的方式2.1管道2.1.1什么是管道2.1.2管道的本质2.2匿名管道2.2.1匿名管道的接口函数2.2.2从内核的角度理解管道2.2.3匿名管道的特性2.2.4如何将文件描述符设置为非阻塞2.2.5匿名管道的非阻塞特... 查看详情

[linux]详解linux进程间通信(代码片段)

目录前言1.进程间通信的目的2.进程间通信的方式2.1管道2.1.1什么是管道2.1.2管道的本质2.2匿名管道2.2.1匿名管道的接口函数2.2.2从内核的角度理解管道2.2.3匿名管道的特性2.2.4如何将文件描述符设置为非阻塞2.2.5匿名管道的非阻塞特... 查看详情

linux进程通信之匿名管道(代码片段)

进程间的通信方式  进程间的通信方式包括,管道、共享内存、信号、信号量、消息队列、套接字。进程间通信的目的  进程间通信的主要目的是:数据传输、数据共享、事件通知、资源共享、进程控制等。进程间通信之管... 查看详情

linux进程间通信之管道

我们先来说说进程间通信(IPC)的一般目的,大概有数据传输、共享数据、通知事件、资源共享和进程控制等。但是我们知道,对于每一个进程来说这个进程看到属于它的一块内存资源,这块资源是它所独占的,所以进程之间的... 查看详情

进程间通信(ipc)之共享内存

...内存(ShareMemory)以及套接字(Socket)。进程间通信主要包括了管道、系统IPC(包括了消息队列、信号以及共享存储)、套接字(Socketÿ 查看详情

linux-进程间通信(代码片段)

进程间通信进程间通信介绍进程间通信目的进程间通信发展进程间通信分类管道匿名管道匿名管道特点匿名管道读写规则命名管道创建一个命名管道命名管道的打开规则用命名管道实现server&client通信systemV共享内存共享内存共... 查看详情

linux-进程间通信(代码片段)

进程间通信进程间通信介绍进程间通信目的进程间通信发展进程间通信分类管道匿名管道匿名管道特点匿名管道读写规则命名管道创建一个命名管道命名管道的打开规则用命名管道实现server&client通信systemV共享内存共享内存共... 查看详情

linux进程间通信--消息队列相关函数(ftok)详解(代码片段)

ftok消息队列、信号灯、共享内存常用在Linux服务端编程的进程间通信环境中。而此三类编程函数在实际项目中都是用SystemVIPC函数实现的。SystemVIPC函数名称和说明如下表15-1所示。表15-1SystemVIPC函数 消息队列信号灯共享内存区头... 查看详情