您当前的位置: 首页 > 

全网首发:解决办法:shmget()一直失败,errno=-22

柳鲲鹏 发布时间:2019-03-16 19:33:13 ,浏览量:0

  一般代码如下:

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

 

关注
打赏
1688896170
查看更多评论

柳鲲鹏

暂无认证

  • 0浏览

    0关注

    4641博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.2249s