而对于描述消息队列自身的结构体:
消息队列的对应接口: int msgget(key_t,int msgflg); 函数功能:创建新的消息队列或获取已存在的消息队列 参数:第一个参数key由ftok函数生成,第二个参数msgflg有两个宏IPC_CREAT,IPC_EXCL,前者表示若对应消息队列不存在则进行创建,否则获取这个消息队列,后者单独使用的意义不大,与前者同时使用表示若对应消息队列不存在,则创建,否则报错,用于保证所得消息队列是新建的而不是已存在的对象 返回值:返回一个消息队列的标识符,若出错则返回-1 key_t ftok(const char* pathname,int proj_id);用于生成key值 ssize_t msgrcv(int msqid,const void* msgp,size_t msgsz,long msgtyp,int msgflg); 函数功能:从消息队列中读消息 int msgsnd(int msqid,const void* msgp,size_t msgsz,int msgflg); 函数功能:向消息队列中写消息 参数:msqid表示消息队列的标识码;msgp指向消息缓冲区的指针,用户自定义的结构体(包含字段有long mtype(这个字段的值必须大于0)与char mtext[大小由用户指定]);msgsz表示消息的大小;msgtyp从消息队列中读取消息的形态,若为0则表示消息队列中所有类型(自定义结构体中的mtype字段的值代表类型)消息都会被读取,若不为0,则只能获得同类型的消息;msgflg表示对于消息队列的读写是否进行等待,若为0表示对于消息队列为空进行读取等待,为满则进行写等待 int msgctl(int msgqid,int cmd,struct msqid_ds* buf); 函数功能:设置消息队列属性,对指定消息队列执行cmd操作 参数:cmd可以设为三种操作 IPC_STAT表示获取消息队列中对应的msqid_ds数据结构,并保存在buf中; IPC_SET表示设置消息队列的属性,而待设置的属性保存在buf中; IPC_RMID表示从内核中删除指定消息队列 对于消息队列,有两个重要的命令:ipcs -q(用于查看系统中的消息队列);ipcrm -q msqid(用于删除指定消息队列) 对比消息队列和管道,消息队列的特点在于进行数据块通信(消息具有明显的类型块大小);而且可以用于两个不相关的进程间通信;支持同步与互斥机制;对于接收的消息可以进行类型的选择;最重要的是在内核中创建的消息队列可以独立与收发进程而存在,它是由内核维护的,其生命周期不随进程,而且从消息队列中获取消息不一定得先进先出,支持随机访问