0

我有代码

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

我不知道为什么会这样?

我已经删除并分离了共享内存,为什么它仍然会发生?

以及如何预防?

4

1 回答 1

1

根据 man shmget :

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,您可以检查删除是否成功。

于 2013-11-05T09:43:15.547 回答