我有代码
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
我无法弄清楚为什么会这样?
我删除并分离了共享内存,为什么还会发生?
如何预防?
答案 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
,您可以检查删除是否成功。