![两个进程是否可以使用相同的共享内存,而无需借助文件来获取它,无论是内存映射文件还是 /dev/shm 文件?](https://linux22.com/image/220985/%E4%B8%A4%E4%B8%AA%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%9B%B8%E5%90%8C%E7%9A%84%E5%85%B1%E4%BA%AB%E5%86%85%E5%AD%98%EF%BC%8C%E8%80%8C%E6%97%A0%E9%9C%80%E5%80%9F%E5%8A%A9%E6%96%87%E4%BB%B6%E6%9D%A5%E8%8E%B7%E5%8F%96%E5%AE%83%EF%BC%8C%E6%97%A0%E8%AE%BA%E6%98%AF%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E6%96%87%E4%BB%B6%E8%BF%98%E6%98%AF%20%2Fdev%2Fshm%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我很好奇,因为今天我知道如何为两个不同的进程提供相同的共享内存的唯一方法是通过内存映射文件,换句话说,两个进程打开相同的内存映射文件并写入/读取它。
由于操作系统需要在磁盘和内存之间交换,因此这会带来惩罚/缺点。
如果这是一个愚蠢的问题,请提前道歉,但是进程之间是否存在纯粹的共享内存,而不是由文件支持。如果是,如果不使用内存映射文件或 /dev/shm 文件,进程将如何获取它?
答案1
如果这是一个愚蠢的问题,请提前道歉,但是进程之间是否存在纯粹的共享内存,而不是由文件支持。
这不是一个愚蠢的问题!
有,这是获取它的默认方式; (SYSV)shmget
是用于获取这些共享内存缓冲区的函数。您为其分配一个字符串名称,a钥匙,另一个进程可以使用该密钥来shmget
访问该密钥。 POSIX 方式具有shm_open
非常相似的语义:您为段指定一个名称,该名称可能看起来很像文件名,但不受某些硬盘驱动器的支持,并且后续shm_open
调用相同的名称(具有兼容/无标志)将授予对同一内存的访问权限。