UNIX C“反向映射”:将地址空间映射到磁盘而不实际写入

问题描述 投票:0回答:2

在我的程序中,我生成一些文件,将其写入磁盘,然后将其提供给第二个程序,该程序再次在我的父应用程序中从磁盘读取它。我在第二个程序完成执行后立即删除这些文件。

我想知道是否有类似“反向 mmap”的东西可以使另一个程序通过文件系统访问地址空间。 然后我可以将我的地址空间“映射”到文件系统,程序 B 可以从那里读取它,将其视为常规文件。

有什么指点吗?

c unix mmap
2个回答
2
投票

使另一个程序可以通过文件系统访问地址空间

虽然技术上有一种方法可以通过

/proc
来做到这一点,但这是一个糟糕的主意,所以我不会详细介绍。

您可以做的是使用

shm_open
创建(并映射和写入)一个 POSIX 命名的共享内存对象,然后可以在另一个进程中类似地打开(并映射和读取)该对象。路径名必须以
/
开头才能像这样可移植共享。

这个共享内存对象从技术上讲并不是一个文件:尽管至少在 Linux 上它由

tmpfs
文件支持,但它不会被写入任何磁盘,除非可能是由于分页。

确实要求子进程知道它被赋予了共享内存段名称,除非您只是传递

tmpfs
路径名(例如,Linux上的
/dev/shm/pathname
)。


0
投票

System V 共享内存正是您所寻找的。请参阅

shmat
shmdt
shmget
和相关系统调用。但请注意,就像
mmap
'ing 文件一样,这不提供简单的
read()
/
write()
界面。它的性能可能更高,但也复杂得多。我已经多次使用 SysV 共享内存。它需要互斥锁,要么嵌入在共享内存中,要么嵌入在 SysV 等效项中(请参阅
semget
semop
系统调用)。

© www.soinside.com 2019 - 2024. All rights reserved.