mq_unlink将errno设置为EEXIST

时间:2009-07-07 18:31:11

标签: c solaris posix message-queue

我正在使用消息队列在服务器中进行线程间通信。该服务器在周四晚上按预期运行。当我在星期一选择备份项目时,它无法创建正在使用的六个队列中的两个,因为它们已经打开(O _ EXCL已设置)。这不应该是这种情况,但是我添加了一个带有错误检查的mq _ unlink调用,并从mq _ open中删除了O _ EXCL标志。

当我编译并运行时,erqno被mq _ unlink和mq _打开设置为EEXIST。这应该是不可能的:mq _ unlink在任何情况下都不能将errno设置为EEXIST,并且mq _ open只能在O _ EXCL标志为0时设置EEXIST集。

为什么会发生这种情况?

1 个答案:

答案 0 :(得分:3)

我认为这是一个Solaris错误。检查锁文件(通常是/var/tmp/.MQL/ ...)并在知道消息队列未使用时将其删除。这应该允许unlink成功。