【发布时间】:2022-11-25 03:00:10
【问题描述】:
我正在通过 shm 函数使用共享内存在 c 中编写项目。我想尝试“连接”到共享内存并使用 shmget() 函数检查它是否存在。
我用这个函数尝试了几个标志,但没有达到预期的结果。我想知道是否有办法查看共享内存是否已经存在。
【问题讨论】:
-
提示:查看标志参数的允许值。
标签: c process ipc shared-memory
我正在通过 shm 函数使用共享内存在 c 中编写项目。我想尝试“连接”到共享内存并使用 shmget() 函数检查它是否存在。
我用这个函数尝试了几个标志,但没有达到预期的结果。我想知道是否有办法查看共享内存是否已经存在。
【问题讨论】:
标签: c process ipc shared-memory
manual page 相当明确地说明了这一点。
int shmget(key_t key, size_t size, int shmflg);
如果shmflg指定两者IPC_CREAT和IPC_EXCL并且密钥的共享内存段已经存在,然后shmget()失败了errno调成存在.
再一次,标志:
IPC_CREAT
- 创建新段。如果不使用此标志,则shmget()将找到与关联的段钥匙并检查用户是否有权访问该段。
IPC_EXCL
- 此标志与IPC_CREAT以确保此调用创建段。如果该段已存在,则调用失败。
所以你想要一些类似的东西:
errno = 0; if (-1 == shmget(key, size, IPC_CREAT | IPC_EXCL)) { if (EEXIST == errno) { /* shared memory exists */ } }
【讨论】: