linux扩充消息队列,Linux关于消息队列的使用分享
今天完成消息队列的使用。
消息队列类似FIFO,但是可以实现随机查询。
主要函数:msgget,msgsnd,msgrcv,msgctl
实验实现两个进程之间的通信。
一个发送,一个接受。并不需要额外实现进程同步。
源代码来自华清远见:
发送:
#include
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 512
struct message
{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
//ftok根据不同路径和关键字产生标准的KEY
if((key = ftok(“.”, ‘a’)) == -1)
{
perror(“ftok”);
exit(1);
}
if((qid = msgget(key, IPC_CREAT|0666)) == -1)//创建
{
perror(“msgget”);
exit(1);
}
printf(“open queue %dn”, qid);
while(1)
{
printf(“enter some message to the queue:”);
if((fgets(msg.msg_text, BUFFER_SIZE, stdin)) == NULL)
{
puts(“no message”);
exit(1);
}
msg.msg_type = getpid();//消息类型为进程号
if((msgsnd(qid, &msg, strlen(msg.msg_text), 0)) < 0)//发送消息
{
perror(“message posted”);
exit(1);
}
if(strncmp(msg.msg_text, “quit”, 4) == 0)
{
break;
}
}
exit(0);
}
接收:
#include
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 512
struct message
{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
if((key = ftok(“.”, ‘a’)) == -1)
{
perror(“ftok”);
exit(1);
}
if((qid = msgget(key, IPC_CREAT|0666)) == -1)//创建
{
perror(“msgget”);
exit(1);
}
printf(“open queue %dn”, qid);
do
{
memset(msg.msg_text, 0, BUFFER_SIZE);
if(msgrcv(qid, (void*)&msg, BUFFER_SIZE, 0, 0) < 0)//接收消息
{
perror(“msgrcv”);
exit(1);
}
printf(“the message from process %d : %s”, msg.msg_type, msg.msg_text);
}while(strncmp(msg.msg_text, “quit”, 4));
if((msgctl(qid, IPC_RMID, NULL)) < 0)//从
{
perror(“msgctl”);
exit(1);
}
exit(0);
}
打开两个终端,1号发送,2号接收
—-想了解更多的linux相关异常处理怎么解决关注
本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。
如若转载,请注明出处:https://www.ssfiction.com/linuxxt/61445.html
linux扩充消息队列,Linux关于消息队列的使用分享相关推荐
- linux扩充文件夹容量,Linux扩充磁盘空间 【附查看磁盘命令】
今天手里一台raksmart要重做一下系统,但是做完以后发现磁盘空间只有2G-顿时感觉整个人不好了.于是乎练习客服处理,RAKSmart机器速度虽然一般,但是客服回复是真快,只需要一段命令就可以完美解 ...
- linux.调整收发队列,linux消息队列通信
程序目的:学习linux消息队列通信 所用主要函数:msgget(),msgsnd(),msgrcv(),msgctl() 首先介绍每个函数的用法: (1)msgget 使用格式: #include ...
- Linux系统编程(七)消息队列
Linux系统编程(七)消息队列 一.什么是消息队列 二.消息队列内部原理 三.实现消息队列的收发 1.发送消息队列 2.接收消息队列 四.消息队列与命名管道的比较 一.什么是消息队列 消息队列提供了 ...
- msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列
Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...
- Linux进程通信之System V消息队列
System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...
- 【Linux系统编程】进程间通信之消息队列
00. 目录 文章目录 00. 目录 01. 消息队列概述 02. 消息队列相关函数 03. 消息队列读写操作 04. 测试代码 05. 附录 01. 消息队列概述 消息队列提供了一种在两个不相关的进 ...
- Linux IPC实践(6) --System V消息队列(3)
消息队列综合案例 消息队列实现回射客户/服务器 server进程接收时, 指定msgtyp为0, 从队首不断接收消息 server进程发送时, 将mtype指定为接收到的client进程的pid cl ...
- linux 声明消息函数,linux消息队列函数--解析
#include www.2cto.com --------------------------------------------------------------------- 1.系统建立IP ...
- linux 线程同步消息队列,Linux 多线程同步之消息队列
消息队列是消息的链表,存放在内核中并有消息队列标示符标示. msgget用于创建一个新队列或打开一个现存的队列.msgsnd将新消息加入到消息队列中:每个消息包括一个long型的type:和消息缓存: ...
- Linux IPC实践(5) --System V消息队列(2)
消息发送/接收API msgsnd函数 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 参数 msgid: 由ms ...
最新文章
- TensorFlow反向传播算法实现
- Linux服务器-使用mysql
- 【调试基础】Part 3 Window操作系统
- maven修改setting文件后重启_Maven项目构建
- java中 构造器与void
- Sqlmap爆库命令的简单使用
- 有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...
- CentOS 最小化安装后安装桌面
- Html+Css打造一个精美的注册页面
- web开发时碰到的问题以及心得经验
- outlook发邮件的服务器,outlook中要求写接收、发送邮件的服务器,应该怎样写?...
- linux vi/vim 的命令
- java线程倒计时_Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger...
- Gson的基本介绍和使用
- 手把手教你几种生成词云的方式
- 关于Cat,同轴,光纤等以太网电缆的所有信息
- 计算机图形学 读书笔记(八) 光线跟踪加速Ray Tracing Acceleration
- 二、谈谈对数据库中索引的理解
- jquery循环创建div
- kindeditor 自定义上传图片
热门文章
- linux shell概述,Linux学习 -- Shell基础 -- 概述
- openocd调试Linux内核,Ubuntu下配置OpenOCD+FT2232
- 排序算法java源代码_排序算法汇总(java实现,附源代码)
- JAVA连接hbase伪分布失败_hbase伪分布安装配置
- 将tflearn的模型保存为pb,给TensorFlow使用
- 寒武纪芯片——有自己的SDK,支持tf、caffe、MXNet
- vue.js项目的mock数据配置
- uglify压缩angular控制器注意
- SQL Server2008(二)各版本的功能和主要应用范围
- jQuery Ajax详解