【发布时间】:2010-11-08 19:16:58
【问题描述】:
我在服务器中使用消息队列进行线程间通信。服务器在星期四晚上按预期运行。当我周一重新选择该项目时,它无法创建六个正在使用的队列中的两个,理由是它们已经打开(设置了 O_EXCL)。这不应该是这种情况,但是我添加了一个带有错误检查的 mq_unlink 调用,并从 mq_open 中删除了 O_EXCL 标志。
当我编译并运行时,mq_unlink 和 mq_open 都将 errno 设置为 EEXIST。这应该是不可能发生的:mq_unlink 在任何情况下都不能将 errno 设置为 EEXIST,而 mq_open 只能在设置 O_EXCL 标志时设置 EEXIST。
任何想法为什么会发生这种情况?
【问题讨论】:
-
愚蠢的问题,但电话真的失败了吗?如果调用没有失败,你永远不能依赖 errno 的值。
标签: c solaris posix message-queue