首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

进程通信(二)消息队列(System V 消息队列)

一、System V 消息队列简介 消息队列:消息队列的本质是由Linux内核创建用于存放消息的链表,并且其功能是用来存放消息的,所以又称之为消息队列。...在Linux的不同进程中,包括有血缘的进程和无血缘的进程,都可以通过Linux消息队列API所得到的消息队列唯一标识符对消息队列进行操作。...二、分析消息队列的数据结构 Linux为了维护消息队列,为消息队列创建了数据结构,接下来我们来分析一下消息队列的结构以及消息队列节点的结构。...内核所设计消息队列的大致模样,这对于我们理解消息队列Linux API有着至关重要的作用。...msgctl 4.int msgctl(int msqid, int cmd, struct msqid_ds* buff); msgctl接口可以使得进程在msqid所标识的消息队列上进行各种控制操作

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux进程间通信(二) - 消息队列

消息队列 消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。...消息队列中的每条消息通常具有以下属性: Ø 一个表示优先级的整数; Ø 消息的数据部分的长度; Ø 消息数据本身; 下面我们分别阐述POSIX消息队列和System V消息队列,这2种消息队列目前Linux...在Linux 2.6中该类型的定义为整型: #include typedef int mqd_t; // 关闭消息队列 mqd_t mq_close(mqd_t mqdes...下面是在Linux 2.6下shell对启动进程的POSIX消息队列大小的限制: [root@rocket ipc]# ulimit -a|grep message POSIX message queues...失败时返回-1. msgctl函数 该函数用来控制消息队列,它与共享内存的shmctl函数相似,它的原型为: int msgctl(int msgid, int command, struct msgid_ds

6.1K90

Linux 的进程间通信:消息队列

前言 Linux系统给我们提供了一种可以发送格式化数据流的通信手段,这就是消息队列。.../msg_create msgget(): File exists 顺便看一下msgctl方法,我们可以用它来取一个消息队列的相关状态。更详细的信息可以man 2 msgctl查看。...使用msgctl删除消息队列的方法比较简单,不在复述。另外关于msgctl的其他使用,请大家参考msgctl的手册。这部分内容的另外一个权威参考资料就是《UNIX环境高级编程》。...这套消息队列在Linux 2.6.6版本之后开始支持,还需要你的glibc版本必须高于2.3.4。...最后 希望这些内容对大家进一步深入了解Linux的消息队列有帮助。如果有相关问题,可以在我的微博、微信或者博客上联系我。 大家好,我是Zorro!

13.2K01

进程间通讯(五).message queue(2)

msgqueB.c #include #include //key_t,ftok,msgget,msgrcv,msgctl,IPC_RMID 相关声明在这个头文件中有所包含...msg.msg_text); //将信息内容在终端进行打印 }while(strcmp(msg.msg_text,"quit\n")); //如果内容为quit就进行跳出 if( 0 > msgctl...(qid,IPC_RMID,NULL) ) //将队列删除,如果不删除,在进程退出后,消息将依旧保留在内核中,直到重启系统,消息的持久性,界于进程与磁盘之间 { perror("msgctl...*/ #define IPC_NOWAIT 04000 /* Return error on wait. */ /* Control commands for `msgctl...函数调用成功时,该函数返回放到接收缓存区中的字节数,消息被复制到由msgp指向的用户分配的缓存区中,然后删除消息队列中的对应消息; 失败时返回-1 ---- msgctl msgctl 的原型定义在 sys

76420

Linux进程间通信(上)之管道、消息队列实践

管道是Linux支持的最初Unix IPC形式之一,管道与管道之间通信其实就是一个文件,但它不是一个普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统而且只存在内存中。...当调用成功时,该函数返回放到接收缓存区中的字节数,消息被复制到由msg_ptr指向的用户分配的缓存区中,然后删除消息队列中对应的消息;失败则返回-1. 3.4、msgctl函数 该函数用来控制消息队列。...int msgctl(int msgid, int command, struct msgid_ds *buf); 该系统调用对由msqid标识的消息队列执行cmd操作,共有三种cmd操作: IPC_STAT...2、使用msgctl函数,写IPC_RMID标志删除消息队列 (4)删除消息队列 msgrm.c #include #include #include <sys...msgid:%d \n" , msgid); //写IPC_RMID标志 if(msgctl(msgid , IPC_RMID , NULL) == 0) { printf

2.2K10
领券