一般代码如下:
key = 1234;
m_nShmId = shmget(key, 1024, 0666|IPC_CREAT);
if (m_nShmId == -1)
{
GH_LOG_ERROR("shmget() FAILED!");
return false;
}
有人奇怪了,这语句是多么的正确,为什么一直错误呢?原因就是,这个key已经存在,而且大小跟指定不一致.
怎么办?最简单办法,直接重启机器即可.从程序来讲,还是先删除,再产生:
key = 1234;
//注意是大小0
m_nShmId = shmget(key, 0, 0);
if (m_nShmId != -1)
{
shmctl(m_nShmId, IPC_RMID, 0);
}
m_nShmId = shmget(key, 1024, 0666|IPC_CREAT);
if (m_nShmId == -1)
{
GH_LOG_ERROR("shmget FAILED!");
return false;
}