关于Unix第二卷60页的mq_open 函数的参数非法问题
来源:互联网 发布:网络直播间策划方案 编辑:程序博客网 时间:2024/05/21 12:29
utili.h文件:
#ifndef _UTILI_H
#define _UTILI_H
#include<stdio.h>
#include<unistd.h>
#include<errno.h>
#include<stdlib.h>
#include<assert.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<string.h>
#include<mqueue.h>
#include<wait.h>
#define MAXLEN 1024
#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)
#endif
mqcreate.c 文件:
#include"../utili.h"
int main(int argc,char **argv)
{
int c,flags;
mqd_t mqd;
flags = O_RDWR|O_CREAT;
while((c=getopt(argc,argv,"e"))!=-1)
{
switch(c)
{
case 'e':
flags |= O_EXCL;
break;
}
}
if(optind != argc-1)
{
printf("usage:mqcreate [-e] <name>");
exit(0);
}
mqd = mq_open(argv[optind],flags,FILE_MODE,NULL);
if(mqd == -1)
printf("mq_opem Fail. errno = %d\n",errno);
assert(mqd!=-1);
mq_close(mqd);
exit(0);
}
编译的时候: gcc -o mqcreate mqcreate.c -lrt
如果编译出错执行以下两条命令:
# mkdir /dev/mqueue
# mount -t mqueue none /dev/mqueue
原因是:在Linux系统,消息队列是创建在虚拟文件系统上,而虚拟文件需要挂载
编译通过后 执行: ./mqcreate /mq_name
需要注意的是命令行参数的 /mq_name 必须以这种格式: /mq_name
原因是:每一个消息队列是有一个name来定义的,即是以空字符结尾的字符串形如: /somename
这么命名,原因详细参见Unix第二卷的14页 2.2节 IPC名字:这一小节详细阐述了IPC 名字的规则和移植性问题.
如果还有问题请仔细阅读: man 7 mq_overview
- 关于Unix第二卷60页的mq_open 函数的参数非法问题
- mq_open()函数的 attr 参数错误问题
- 关于编译unix网络编程第二卷--进程间通信源代码的问题及解决
- 关于POSIX消息队列mq_open提示错误信息:Invalid argument的问题
- 关于main函数的第二个参数
- UNIX网络编程卷1(第三版)关于源程序编译出错问题的详细解决方法
- 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
- 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
- 《网络编程》关于 UNIX网络编程 卷1 的 unp.h 和源码编译问题
- VC8/9中CRT函数对非法参数的处理
- VC8/9中CRT函数对非法参数的处理
- 关于dladdr函数参数的问题
- 关于函数中参数传递的问题
- 关于main()函数参数的问题
- 关于js函数的参数传递问题
- ORACLE中的参数问题。非法的变量名
- invalid_argument 非法参数的异常
- unix网络编程I卷之关于wait在不同系统中的表现扩展出来的问题
- LintCode(回文数)
- Gradle编译指定目录下的源码命令参数
- urho3d的helloworld合并成单个文件(存粹copy)
- 使用@ResponseBody的一些问题以及解决方法
- 【Android】【Activity生命周期】Activity生命周期
- 关于Unix第二卷60页的mq_open 函数的参数非法问题
- jquery 判断input框中不能输入特殊字符(#¥%……&*@)
- spring注解大全
- 对consumer instance(消费者实例)的思考
- ZooKeeper 基础知识、部署和应用程序
- 对于java.lang.NoSuchMethodError: antlr.collections.AST.getLine()I错误解决
- Friday the Thirteenth-section1.1
- 《Oracle Database 11gR2性能调整与优化》第一节
- C++中的虚函数的理解和使用