天天看點

全網首發:解決辦法:shmget()一直失敗,errno=-22

一般代碼如下:

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;
        }