我正在尝试为{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。
答案 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);