一般代码如下:
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; }