【问题标题】:How to check if shared memory exists using shmget or ftok?如何使用 shmget 或 ftok 检查共享内存是否存在?
【发布时间】:2022-11-25 03:00:10
【问题描述】:

我正在通过 shm 函数使用共享内存在 c 中编写项目。我想尝试“连接”到共享内存并使用 shmget() 函数检查它是否存在。

我用这个函数尝试了几个标志,但没有达到预期的结果。我想知道是否有办法查看共享内存是否已经存在。

【问题讨论】:

  • 提示:查看标志参数的允许值。

标签: c process ipc shared-memory


【解决方案1】:

manual page 相当明确地说明了这一点。

int shmget(key_t key, size_t size, int shmflg);

如果shmflg指定两者IPC_CREATIPC_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 */
    }
}

另一方面,ftok(3) 失败的原因与 stat(2) 相同。

【讨论】:

    猜你喜欢
    • 2014-03-22
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-11
    • 2020-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多