linux进程通信:消息队列
消息队列可以实现两个没有关系的进程之间的通信。
创建了一个消息队列后,进程可以往里面放消息,也可以取消息。因为这个消息队列是有名字的,所以就算是两个没有关系的进程,也能通信。
而且人性化的一点是,可以自己定义消息的结构体。
几个重要的函数:
//创建消息队列,如果存在就直接获取
int msgget(key_t, key, int msgflg);
//第一个参数是key整形,用于区分不同的队列
//返回key命名的队列id,唯一标识一个队列 //发送消息
int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);
//msgid是标识队列的id
//msg_ptr是自己定义的消息结构体,注意结构体里面是长整型开始 //所以要定义成这样
struct my_message{
long int message_type;
/* The data you wish to transfer*/
}; //获取消息
int msgrcv(int msgid, void *msg_ptr, size_t msg_st, long int msgtype, int msgflg);
//参数跟上面一样
效果图:


Server的代码:(用于取消息)
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/msg.h> struct msg_st
{
long int msg_type;
char text[];
}; int main(){ int msgid = -; struct msg_st data; long int msgtype = ; msgid = msgget((key_t),IPC_CREAT); if(msgid == -){ printf("msgget failed\n"); exit(EXIT_FAILURE); } printf("Server start!\n"); while(){ if(msgrcv(msgid, (void*)&data, , msgtype, ) == -){
printf("msgrcv failed\n");
exit(EXIT_FAILURE);
}//end if //success
printf("from client:%s\n",data.text); }//end while }
Client.c的代码:(用于发消息)
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <sys/msg.h> struct msg_st { long int msg_type; char text[]; }; int main(){ struct msg_st data;
int msgid = -;
char buffer[]; memset(buffer,'\0',); msgid = msgget((key_t),IPC_CREAT); if(msgid == -){
printf("msgget failed\n");
exit(EXIT_FAILURE);
} while(){ printf("Enter a string\n");
fgets(buffer,,stdin);
strcpy(data.text,buffer);
data.msg_type=; msgsnd(msgid, (void*)&data,, ); } }
linux进程通信:消息队列的更多相关文章
- linux 进程间消息队列通讯
转自:http://blog.csdn.net/lifan5/article/details/7588529 http://www.cnblogs.com/kunhu/p/3608589.html 前 ...
- [转]Linux进程通信之POSIX消息队列
进程间的消息队列可以用这个实现,学习了下. http://blog.csdn.net/anonymalias/article/details/9799645?utm_source=tuicool&am ...
- [转]Linux进程间通信——使用消息队列
点击此处阅读原文 另收藏作者ljianhui的专栏初学Linux 下面来说说如何使用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linu ...
- Linux进程间通信——使用消息队列
下面来说说如何用不用消息队列来进行进程间的通信,消息队列与命名管道有很多相似之处.有关命名管道的更多内容可以参阅我的另一篇文章:Linux进程间通信——使用命名管道 一.什么是消息队列 消息队列提 ...
- Linux进程通信学习总结
http://blog.csdn.net/xiaoweibeibei/article/details/6552498 SYSV子系统的相关概念 引用标识符:引用标识符是一个整数,表示每一个SYSV ...
- Linux进程间通信(二) - 消息队列
消息队列 消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据. 消息队列和之前讨论过的管道和FIFO有很大的区别,主要有以下两点(管道请查阅我的另一篇文章 ...
- Linux进程通信----匿名管道
Linux进程通信中最为简单的方式是匿名管道 匿名管道的创建需要用到pipe函数,pipe函数参数为一个数组表示的文件描述字.这个数组有两个文件描 述字,第一个是用于读数据的文件描述符第二个是用于写数 ...
- linux 进程间通信之 消息队列
消息队列就是一个消息的链表. 能够把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程能够向中依照一定的规则加入新消息.有读权限的进程则能够读走消息. 读走就没有了.消息队列是 ...
- Linux进程内消息总线设计
文章目录 Windows平台进程内消息总线 如果没有消息总线,会产生什么问题 死循环包含关系 高耦合.低内聚 消息总线 结构图 原理 生产者与总线的关系 总线与消费者的关系 Linux进程内消息总线设 ...
- Linux进程通信之System V消息队列
System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...
随机推荐
- matlab 破解教程密钥
http://wenku.baidu.com/link?url=YW1f0XP1VRcOq8YtwsIv-m0vMS3YuFwY7H617koFr9zM6I86P-KpCRo1tDewI81eBiXR ...
- flexcan controller register
/********************************************************************* * flexcan controller register ...
- js工具类的封装
common.js原生js实现的大多工具方法都将放在common文件中 布局rem.js,vue开发时,我们只需要将rem.js再main.js中import 引入即可 (function(win, ...
- 安装伪分布式hbase 0.99.0
查看是否启动成功,输入jps,看到有HMaster和HQuorumPeer,浏览器输入http://localhost:16030/master-status,能打开说明成功 hbase(main): ...
- POJ1741 Tree + BZOJ1468 Tree 【点分治】
POJ1741 Tree + BZOJ1468 Tree Description Give a tree with n vertices,each edge has a length(positive ...
- .NET Core 和 .NET Framework 中的 MEF2
MEF,Managed Extensibility Framework,现在已经发布了三个版本了,它们是 MEF 和 MEF2. 等等!3 去哪儿了?本文将教大家完成基于 MEF2 的开发. ME ...
- Maven系列(二)之安装和配置详解
检查JDK环境 在安装Maven之前,首先要确认你已经正确安装了JDK.Maven可以运行在JDK 1.4及以上的版本上. 打开cmd输入: java -version 下载Maven Maven官网 ...
- Mat代码操作
#include<opencv2/opencv.hpp> #include<iostream> using namespace std; using namespace cv; ...
- 重温CLR(九) 接口
对于多继承(multiple inheritance)的概念,许多程序员并不陌生,他是指一个类从两个或多个基类派生的能力.例如,假定TransmitData类的作用是发送数据,ReceiveData类 ...
- python selenium 开发环境配置
selenium是一个web测试应用框架也可以拿来做爬虫. 1.安装selenium模块 pip install -U selenium 2.安装selenium模块后需要有相应的浏览器驱动 A.使用 ...