mq_open:参数无效

时间:2012-04-03 16:25:48

标签: c linux posix message-queue

我正在尝试为{mq_notify man page中的POSIX消息队列运行示例程序。我将其作为./mq '/bla'运行,它给了我错误mq_open: Invalid argument

这是示例程序中提供错误的行:

mqdes = mq_open(argv[1], O_RDONLY);

我尝试将其更改为

mqdes = mq_open("/bla", O_RDONLY | O_CREAT);

但它仍然不起作用。

这一定很简单,但我无法弄清楚。我做错了什么?

顺便说一句,这是RHEL 5.8。

编辑:我错误的第一个错误。没有O_CREAT,它说“没有这样的文件或目录”。我想它试图打开一个不存在的消息队列。使用O_CREAT,我认为无效的参数错误是因为我只有两个参数,你需要四个O_CREAT。

1 个答案:

答案 0 :(得分:9)

如果消息队列不存在,那么mq_open(argv[1], O_RDONLY);只会因“ENOENT(没有这样的文件或目录)而失败。”

如果将其更改为使用O_CREAT,则需要将另外两个参数传递给mq_open()。 (阅读关于O_CREAT的段落).e.g。

    mq_open(argv[1], O_RDONLY | O_CREAT, 0666, NULL);