首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shmget()返回带有IPC_CREAT的ENOENT

shmget()返回带有IPC_CREAT的ENOENT
EN

Stack Overflow用户
提问于 2012-05-18 10:02:39
回答 1查看 1.3K关注 0票数 1

我使用shmget()分配一个共享内存段,然后使用pthread_mutex_init()创建进程间共享的互斥锁。一般来说,这是预期的工作。但是,shmget()偶尔会返回ENOENT。阅读手册页时,这应该只有在shmflg不包含IPC_CREAT时才会发生,但我会将其包含在内。下面是我的代码的一小段:

代码语言:javascript
复制
shmid_ = shmget( MYLOCK_KEY_ID, sizeof(pthread_mutex_t), IPC_CREAT | IPC_EXCL | 0666 );
if ( errno == ENOENT ) {
    // This should never occur since IPC_CREAT was specified
    std::cerr
       << "shmget() returned ENOENT (it thinks IPC_CREAT wasn't  specified).\n"
       << "This seems to be a bug in shmget()?" << std::endl;
    exit(1);
}

我完全不知道会发生什么。我已经在几个系统(Linux内核2.6.32和3.3.5)上进行了尝试,但两者都表现出相同的行为。目前,当我获得这个失败模式时,我只需重复这个过程,它通常就能正常工作。但这看起来有点杂乱无章,我不知道这是不是shmget()中的错误,或者我只是做错了什么。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-18 10:16:36

您的if语句没有检查返回值-手册页显示检查-1的shmid_,然后检查errno。

代码语言:javascript
复制
RETURN VALUE 
A valid segment identifier, shmid, is returned on success, -1 on error.

您所做的只是检查errno -它可能是在对某个其他函数的调用失败后出现的ENOENT。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10645823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档