已删除共享内存但得到shm ipc_id错误

时间:2013-11-05 09:35:33

标签: c linux shared-memory

我有代码

shmid = shmget(IPC_CREAT, size, IPC_CREAT|0666) ;
if ( shmid < 0 )
{
        perror("get shm ipc_id error") ;
        return -1 ;
}
shmaddr = (unsigned int*)shmat(shmid, 0, 0 ) ;

创建共享内存并执行某些操作

在底部

  shmdt( shmaddr ) ;
  shmctl(shmid, IPC_RMID, NULL) ;

删除共享内存。

第一次执行该程序,它工作正常。

但如果我第二次执行,则为printf

get shm ipc_id error: Invalid argument

我无法弄清楚为什么会这样?

我删除并分离了共享内存,为什么还会发生?

如何预防?

1 个答案:

答案 0 :(得分:1)

根据男人的说法:

ERRORS
       On failure, errno is set to one of the following:

       EINVAL A new segment was to be created and size < SHMMIN or size > SHMMAX, or  no  new  segment
              was  to  be created, a segment with given key existed, but size is greater than the size
              of that segment.

使用ipcs,您可以检查删除是否成功。