第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第1页共9页Linux进程间通信之消息队列作者:武汉华嵌嵌入式培训中心技术部在linux下有两种消息队列,一种是POSIX的消息队列,另外一种是SystemV消息队列
在这里只讲SystemV队列的使用
SystemV消息队列使用消息队列标识符标识,在某个进程往一个队列中写入一个消息之前,不求另外某个进程正在等待该队列上一个消息的到达
对于系统中每个消息队列,内核维护一个定义在头文件中的信息结构
该结构如下:structmsqid_ds{structipc_permmsg_perm;/*read_writeperms:Section3
3*/structmsg*msg_first;/*ptrtofirstmessageonqueue*/structmsg*msg_last;/*ptrtolastmessageonqueue*/msglen_tmsg_cbytes;/*current#bytesonqueue*/……}消息队列由内核进行维护,我们可以将内核中某个选定的消息队列画为一个消息链表,如下图所示:第2页共9页第1页共9页编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第2页共9页以下都是操作消息队列的API函数,在这里将对其一一讲解
创建一个消息队列
#includeintmsgget(key_tkey,intoflag);该函数在执行正常返回时,返回的是一个整数标识符,其他三个函数就用它来指代该队列
该标识符是基于指定的key产生的,而key即可以是ftok的返回值,也可以是常值IPC_PRIVATE
oflag可以是读写权限的值的组合,它还可以与IPC_CREAT或IPC_CREAT|IPC_EXCL按位或
当创建一个新消息队列时,msqid_ds结构的一些成员被初始