最近在看IPC,自己在编写Posix消息队列时,遇到mq_open无法打开,总是返回错误。因为在posix标准中,并不是所有的名字都可以使用,必须是以 / 开始,并且名字里只能包含一个 / 。
代码如下,如果使用NAME ,输出success。如果使用NAME1,输出erro
#include <stdlib.h>
#include <sys/stat.h>
#include <iostream>
#include <mqueue.h>
#include <fcntl.h>
using namespace std;
#define NAME "/myque.1234"
#define NAME1 "myque.1234"
#define MODE S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP
void test()
{
int flags=O_RDWR|O_CREAT;
mqd_t mqd;
if((mqd=mq_open(NAME,flags,MODE,NULL))==(mqd_t)-1)
cout<<"erro"<<endl;
else
cout<<"success"<<endl;
mq_close(mqd);
}
int main()
{
test();
return 0;
}