【发布时间】:2012-04-17 08:30:54
【问题描述】:
我正在尝试为 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 需要四个。
【问题讨论】:
-
发布该示例程序的 strace 输出。但请注意,如果您将其更改为使用
O_CREAT,您需要将 2 个额外的参数传递给 mq_open()。例如mq_open(argv[1], O_RDONLY | O_CREAT, 0666, NULL); -
@nos 哦,解决了。我认为我的第一个错误是错误的。如果我没有 O_CREAT,它会说“没有这样的文件”之类的。当我添加 O_CREAT 时,我猜“无效参数”是缺少的参数 3 或 4。谢谢。如果你想把它写成一个,我可以接受这个作为答案。
标签: c linux posix message-queue