我在 Linux 上有两个进程,它们共享由
shm_open
+ ftruncate
+ mmap
创建的内存块。
生产者创建shm后,消费者在插入shm时需要知道shm的大小。
这两个进程NOT是父/子关系,所以我可以NOT自然地通过
fork
将大小从一个进程传递到另一个进程。
对于任何RPC方法,我认为它们都太重了,而我只需要获取shm的大小即可。
有没有简单/方便的方法来做到这一点?
我认为你正在寻找的是这样的东西(在消费者进程中)来获取共享内存区域的大小:
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)");