在Linux上获取共享内存大小的便捷方法

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

我在 Linux 上有两个进程,它们共享由

shm_open
+
ftruncate
+
mmap
创建的内存块。

生产者创建shm后,消费者在插入shm时需要知道shm的大小。

这两个进程NOT是父/子关系,所以我可以NOT自然地通过

fork
将大小从一个进程传递到另一个进程。

对于任何RPC方法,我认为它们都太重了,而我只需要获取shm的大小即可。

有没有简单/方便的方法来做到这一点?

c linux shared-memory rpc mmap
1个回答
0
投票

我认为你正在寻找的是这样的东西(在消费者进程中)来获取共享内存区域的大小:

int areaID = [... value returned by shm_open() or shmget() ...]

struct shmid_ds buf;
if (shmctl(areaID, IPC_STAT, &buf) == 0)
{
   const size_t areaSizeBytes = buf.shm_segsz;
   [...]
}
else perror("shmctl(IPC_STAT)");
© www.soinside.com 2019 - 2024. All rights reserved.