关于Unix第二卷60页的mq

xiaoxiao2021-02-28  14

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

转载请注明原文地址: https://www.6miu.com/read-850003.html

最新回复(0)