1.创建一个posix消息队列,队列名又标准输入传进
增加排他性选项;
问题:
{
vi J 把下一行合并到这一行尾
u 恢复删除内容
dw 删除一个单词
main 的入参 int argc, char **argv
mq_open的第二第三个参数:flags 是对消息队列的属性,读写创建排他等,mode是对组,用户的权限设定;
Getopt用法, 放在while中
标志位的头文件O_RDWR ,O_CREAT等,在UNIX下是在fcntl.h里
main函数入参char **argv写为char * argv,在用到argv的地方报错:
Function argument assignment between types "char* const*" and "char*" is not allowed.
函数结束位exit(0);
optind 在 stdio.h中
while (c= getopt(argc,argv,"e"))
while((c=getopt(argc,argv,"e"))!=-1) 要加括号
{
switch(c)
{
case 'e': //加'e'
oflag|=O_EXCL
break;
default:
break;
}
argv[optind]
输入程序名执行的时候,optind为1
argc 为1
加入文件名后 creatP ./dd
输入程序名执行的时候,optind为1
argc 为2
argv[1]为./dd argv[0]为creatP ,数组下标从0开始
}
HP_UX 下编译
dbuild:/dbuild/zhuwei>cc -o creatP creatP.c
ld: Unsatisfied symbol "mq_close" in file creatP.o
ld: Unsatisfied symbol "mq_open" in file creatP.o
加了#include <sys/mqueue.h>
在每个环境下使用mq_open等函数的时候,先man一下,
因为定义的头文件不同
通过与V消息队列的对比,AIX,HP_UNIX 对V消息队列的支持比较好,例如 msgget的定义都在同一个头文件,
对mq_open HP_UNIX在sys/mqueue.h,AIX在<mqueue.h>
在AIX 下建立了消息队列,消息队列名对应的文件找不到!!!
}
2.从系统中删除一个消息队列
问题:
{
一个消息队列建立完后,可以close一次,但是还存在,
不可以第二次close,用unlink删除;
}
3.获取一个消息队列的属性
4.创建一个posix消息队列,队列名又标准输入传进
增加排他性选项;
创建的时候指定 消息队列最大消息数,每个消息的大小;由标准输入传进
5.向一个队列中增加一个消息
6.从一个消息队列中读一个消息,增加非堵塞性;要获取队列的属性,才可分配空间
7.调用sysconf函数,输出 一个进程可打开多少消息队列, 任意消息的最大优先级