通常使用CreateFileMapping的WINAPI函数可以创建共享内存,可以实现在不同进程中访问同一数据,实现通信等。但我们在其他实际编程中会遇到,服务和进程通信的情况,及系统服务与用户进程共同访问共享内存,如果仍然使用这个API,你会发现,在另一个程序中Open时,是无法返回正确的HANDLE的。

以下这段代码也是来自 stackoverflow上的,我们以此展开学习

const char* sharename =  "Global\\mysharedmemory";
const char* sharessdl = "D:P(A;OICI;GA;;;SY)(A;OICI;GA;;;BA)(A;OICI;GR;;;IU)";
HANDLE CreateGlobalFileMapping()
    SECURITY_ATTRIBUTES security;
    ZeroMemory(&security, sizeof(security));
    security.nLength = sizeof(security);
    ConvertStringSecurityDescriptorToSecurityDescript
分为3个工程:proA,proB,ShareMemLib 其中proA,proB是用wpf写的两个模拟 进程 程序 ShareMemLib将 共享内存 代码封装成lib,定义了发送者和监听者 两个 进程 在实例化ShareMemory时指定相同的map,并指定当前为发送者或监听者 发送者负责发送消息,监听者负责接受消息(监听者务必实现接受消息处理方法) 两个 进程 实例化完成后发送者发送消息,监听者收到消息并处理 至此成功完成了两个 进程 间通过 共享内存 实现通信 前一篇博客说了怎样通过命名管道实现 进程 间通信,但是要在 windows 是使用命名管道,需要使用python调研 windows api ,太麻烦,于是想到是不是可以通过 共享内存 的方式来实现。查了一下,Python中可以使用mmap模块来实现这一功能。 Python中的mmap模块是通过映射同一个普通文件实现 共享内存 的。文件被映射到 进程 地址空间后, 进程 可以像访问内存一样对文件进行访问。 不过,mmap在linux和 windows 上的 API 有些许的不一样,具体细节可以查看mmap的文档。 下面看一个例子: server.py 这个 程序 使用 test.dat 文件来映射内存,并且分配了1024字节的大小, 信号是Linux 系统 中用于 进程 间互相通信或者操作的一种机制,信号可以在任何时候发给某一 进程 ,而无需知道该 进程 的状态。 如果该 进程 当前并未处于执行状态,则该信号就有内核保存起来,知道该 进程 回复执行并传递给它为止。 如果一个信号被 进程 设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消是才被传递给 进程 。 Linux 系统 中常用信号: (1)SIGHUP: 用户 从终端注销,所有已 启动 进程 都将收到该 进程 系统 缺省状态下对该信号的处理是终止 进程 。 (2)SIGINT: 程序 终止信号。 程序 运行  用于创建内核对象的函数几乎都有一个指向SECURITY_ATTRIBUTES结构的指针作为其参数,在使用CreateFileMapping函数的时候,通常只是为该参数传递NULL,这样就可以创建带有默认安全性的内核对象。       默认安全性意味着对象的管理小组的任何成员和对象的创建者都拥有对该对象的全部访问权,而其他所有人均无权访问该对象。可以指定一个ECURITY_ATTRIBUTES结构 共享内存 是System V系列的一种 进程 间通信的方式。 共享内存 允许多个毫不相干的 进程 读取和写入同一块物理内存,当某个 进程 共享内存 中写入数据时,其它 进程 就能够立马读取到 共享内存 中的数据,从而达到 进程 间通信的目的。这也是所有 进程 间通信方式中最快的一种。 select的时间复杂度O(n)。它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。 epoll的时间复杂度O(1)。epoll可以理解为event poll,不同于忙轮询和无差别轮询,epoll会把哪个流发生了怎样的I/O事件通知我们。所以我们说epoll实 1、 程序 进程 、线程 程序 :计算机指令的集合,它以文件的形式存储在磁盘上。 程序 是静态实体(passive Entity),在多道 程序 系统 中,它是不能独立运行的,更不能与其他 程序 并发执行。 进程 :通常被定义为一个正在运行的 程序 的实例,是一个 程序 在其自身的地址空间中的一次执行活动。定义: 进程 进程 实体(包括: 程序 段、相关的数据段、 进程 控制块PCB)的运行过程,是 系统 进行 通过本次实验,我们深入了解了 Windows 系统 中的资源共享 服务 以及文件夹配额管理的原理和操作方法。我们认识到资源共享 服务 Windows 系统 中扮演着重要的角色,它使得不同计算机之间的文件和数据可以相互访问和共享。同时,文件夹配额管理可以有效地控制 用户 在共享文件夹中存储的文件数量和大小,确保共享资源的安全和稳定。在实验过程中,我们通过解决问题,提高了解决实际问题的能力,也锻炼了团队协作和沟通能力。这些技能在未来的工作中将是非常重要的。此外,通过实验,我们也发现了一些不足之处。