当前位置:  技术问答>linux和unix

mqopen 出错!!

    来源: 互联网  发布时间:2016-02-22

    本文导语:  #include  #include  #include  #include  #include  #include  #define PMODE 0666 int main() {         int i;         mqd_t mqfd;         struct mq_attr attr;         int open_flags = 0;         attr.mq_maxmsg = 20;       ...

#include 
#include 
#include 
#include 
#include 
#include 
#define PMODE 0666

int main()
{
        int i;
        mqd_t mqfd;
        struct mq_attr attr;
        int open_flags = 0;

        attr.mq_maxmsg = 20;
        attr.mq_msgsize = 30;
        attr.mq_flags   = 0;
        open_flags = O_CREAT;
        mqfd = mq_open("queuemsg",open_flags,PMODE,NULL);
        if (mqfd ==(mqd_t)-1)
        {
                perror("mq_open failure from main");
                exit(0);
        };
        mq_close(mqfd);
        printf("success");
}
编译执行
mq_open failure from main: Invalid argument

出错了,请问mq_open 如何使用才是正确的


|
根据http://www.opengroup.org/onlinepubs/009695399/functions/mq_open.html的描述:

If name begins with the slash character, then processes calling mq_open() with the same value of name shall refer to the same message queue object, as long as that name has not been removed. If name does not begin with the slash character, the effect is implementation-defined. The interpretation of slash characters other than the leading slash character in name is implementation-defined. If the name argument is not the name of an existing message queue and creation is not requested, mq_open() shall fail and return an error.

建议 name 参数以一个斜杠"/"开头,而且只有一个斜杠。

#include 
#include 

#include 
#include 
#include 

#include 

#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH)

int main(void)
{
        mqd_t mqd;
        int oflag;
        char name[PATH_MAX + 1];

        oflag = O_CREAT | O_RDWR;
        strcpy(name, "/mq_mymtom");
        mqd = mq_open(name, oflag, FILE_MODE, NULL);
        if ((mqd_t)-1 == mqd)
                perror("mq_open()");
        else
                printf("mq_open(): success.n");

        strcpy(name, "mq_mymtom");
        mqd = mq_open(name, oflag, FILE_MODE, NULL);
        if ((mqd_t)-1 == mqd)
                perror("mq_open()");
        else
                printf("mq_open(): success.n");

        return 0;
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3