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的 ...
随机推荐
- ICE:slice语言常识整理
ICE:Slice语言(二)--源文件和词法规则: 文件命名 Slice的源文件以.ice为扩展名. 对于大小写不区分的系统(例如DOS),文件的扩展名可以大写,也可以小写,例如Cli ...
- js之购物车案例
这里主要提供思路: 一共两个页面通过原生来实现,我们需要对cookie进行封装. 在商品列表页,我们将点击添加的商品放入一个对象中,而后将该对象放入数组中,一个对象可以说就是一个商品.在购物车页面 ...
- kubeadm搭建kubernetes集群之三:加入node节点
在上一章<kubeadm搭建kubernetes集群之二:创建master节点>的实战中,我们把kubernetes的master节点搭建好了,本章我们将加入node节点,使得整个环境可以 ...
- Linux之Ubuntu
1.1 使用创建用户登陆 Ubuntu 默认root用户无法登陆,只能使用在安装系统的时候新创建的用户登录 我这里新建的用户是ubuntu密码111111 1.2 安装ssh server 由于新建的 ...
- 对集合应用符号 | & ^ -
s1 = set('abc') s2 = set('abs') # 在s1而不在s2 print s1 - s2 # set(['c']) # 在s1或者s2 print s1 | s2 # set( ...
- (笔记)JQuery扩展方法实现Form表单与Json互相转换
JQuery笔记 记两段代码,使用JQuery实现从表单获取json与后端交互,以及把后端返回的json映射到表单相应的字段上. 把表单转换出json对象 //把表单转换出json对象 $.fn.to ...
- 【java基础】Java的retry标记的使用
说明:其实retry就是一个标记,标记程序跳出循环的时候从哪里开始执行,功能类似于goto.retry一般都是跟随者for循环出现,第一个retry的下面一行就是for循环,而且第二个retry的前面 ...
- coredns 编译模式添加插件
备注: coredns 默认已经安装了一些插件,比如大家用的多的kubernetes etcd ... 但是我们可以自己编译插件,构建我们自己的 coredns 版本,方便集成使用 1. 项目结 ...
- FastAdmin 中使用 Oder by if 强行将某一类放到前面
FastAdmin 中使用 Oder by if 强行将某一类放到前面 问题来源社区问题 1,查了一些资料2,做了测试. 如下表,我想把 snake 单独放到开始. 可以使用以下查询语句(默认为 AS ...
- MyEclipse自动生成Ant Build.xm
关于MyEclipse 自动生成 Ant Build.xml 配置文件,生成的方法很隐蔽,是自己无意中找到的.选择你要生成Build.xml文件的项目,右键. Export-> General ...