shmctl上的包装器使用shmid 0来清理共享内存段

时间:2016-06-13 11:14:28

标签: linux-kernel shared-memory

我在shmctl上编写了一个包装函数来销毁共享内存段。我只需要确保优雅地删除段。所以写下面的代码行。但我想知道为什么0的shmid是无效值,我们需要abort()?

shmctl_wrap( int shmid, int cmd, shmid_ds buf)
{
    if( cmd == IPC_RMID && shmid == 0 && buf->shm_nattch != 0)
        abort();
    rc = shmctl( shmid, cmd, buf);
    return rc;
}

但是我的系统在一些我无法调试的特殊情况下中止。不确定我的包装是否符合此目的。

我需要知道的是

  1. 在这种情况下,我将shmid视为0。
  2. 当shmid为0时,需要采取哪些额外措施来确保销毁段。
  3. 如果shmid不是有效值,那么我会看到已使用该值创建的段

    ipcs -m

    ------共享内存段--------

    密钥shmid所有者perms字节nattch状态

    0x0001ff07 0 root 666 632004 73
    0x00000000 32769 root 0 512 0
    0x00008000 65538 root 0 430044 41
    0x00000000 196611 root 666 8136 2
    0x00008001 131076 root 42 430044 41
    0x00008002 229381 root 775 430044 1
    0x00008003 262150 root 336 430044 1

0 个答案:

没有答案
相关问题