共享内存: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;
        }

猜你喜欢

转载自blog.csdn.net/liuqingsongmsdn2014/article/details/108263871
今日推荐