【消息】linux之消息队列
消息队列的运行方式与命名管道非常相似。
欲与其他进程通信的进程只需要将消息发送到消息队列中,目的进程就从消息队列中读取需要的消息。
2.源码
1)发送方
//msg_send.c
#include <sys/types.h>
#include <sys/msg.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int msg_id,msg_flags;
int reval;
char send_msg[];
msg_flags=IPC_CREAT|;
msg_id=msgget((key_t),msg_flags);
if(-==msg_id)
{
printf("msg create error.\n");
exit(EXIT_FAILURE);
}
memset(send_msg,,);
sprintf(send_msg,"Hi,I'm %d.",getpid());
reval=msgsnd(msg_id,send_msg,sizeof(send_msg),);
if(-==reval)
{
printf("message send error.\n");
exit(EXIT_FAILURE);
}
else
printf("Send message:%s\n",send_msg);
return ;
}
//msg_rcvr.c
#include <sys/types.h>
#include <sys/msg.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
int main()
{
int msg_id,msg_flags;
int reval;
char send_msg[];
msg_flags=IPC_CREAT|;
msg_id=msgget((key_t),msg_flags);
if(-==msg_id)
{
printf("msg create error.\n");
exit(EXIT_FAILURE);
}
memset(send_msg,,);
reval=msgrcv(msg_id,send_msg,,,);
if(-==reval)
{
printf("message send error.\n");
exit(EXIT_FAILURE);
}
else
printf("Received msg:%s\n",send_msg); reval=msgctl(msg_id,IPC_RMID,);
if(-==reval)
{
printf("remove msg queue error\n");
exit(EXIT_FAILURE);
}
return ;
}
3.mystery注解
2)msqid为消息队列ID
3)消息队列可以在几个进程之间复用,具有一定的独立性,比命名管道更加灵活,也不需要打开与关闭。
4)在最后一个进程使用完消息队列后,不要忘记删除这个消息队列
【消息】linux之消息队列的更多相关文章
- linux进程间通信-消息队列
一 消息队列的介绍 消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法. 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构. 我们可以通过发送消息来避免命名管道的 ...
- Linux进程间通信—消息队列
四.消息队列(Message Queue) 消息队列就是消息的一个链表,它允许一个或者多个进程向它写消息,一个或多个进程向它读消息.Linux维护了一个消息队列向量表:msgque,来表示系统中所有的 ...
- linux IPC 消息队列
消息队列函数原型 在建立IPC通讯时(如消息队列,共享内存)必须建立一个ID值.通常情况下,这个ID值由ftok函数得到 #inlcude <sys/types.h> #include & ...
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- MQ中将消息发送至远程队列的配置
MQ中将消息发送至远程队列的配置 摘自MQ资源管理器帮助文档V7 在开始学习本教程之前,您需要从系统管理员处了解标识网络上接收机器的名称:IP地址.MQ的端口号.队列管理器.接收(远程机器)或者是发送 ...
- MSMQ-发送消息到远程专用队列 实例
目录 一:MSMQ的一些理论上的知识 二:队列类型(Queue Type) 三:安装消息队列 四:在C#中Messagequeue class 五:MSMQ-发送消息到远程专用队列 六:例子 一. ...
- 17.3-uC/OS-III消息管理(消息队列使用)
多值信号量和和互斥信号量主要用来标志事件是否发生和协调资源的访问.如果要给资源赋予内容进行传递, 信号量就力有所不及了.这时候就需要用到 uC/OS 操作系统的另一个内核机制了,那就是消息队列. 2. ...
- redis 的消息订阅和消息队列的功能比较
消息队列常用的有 rabitMQ.kafka等.缓存服务器 redis 也可以做消息队列使用,他们的特点对比如下 消息协议: 消息队列支持包括AMQP,MQTT,Stomp等,并且支持 JMS 规范 ...
- MSMQ-发送消息到远程专用队列path格式
在工作组模式下,远程访问专用队列.在网上找到一篇文章,翻译了一下. 最后结论,直接使用多元素格式名方式,利用IP地址直接对单个或多个目标发送消息 MessageQueue rmQ = new ...
随机推荐
- 快排法求第k大
快排法求第k大,复杂度为O(n) import com.sun.media.sound.SoftTuning; import java.util.Arrays; import java.util.Ra ...
- 关于 Dropout 防止过拟合的问题
关于 Dropout 可以防止过拟合,出处:深度学习领域大神 Hinton,在2012年文献:<Improving neural networks by preventing co-adapta ...
- Ant压缩与解压缩
package com.test.utils; import java.io.File; import java.io.FileOutputStream; import java.io.InputSt ...
- Redis学习之路(002)- Ubuntu下redis开放端口
Redis在ubuntu安装后默认是只有本地访问,需要别的ip访问我们需要修改redis的配置文件 1. dpkg -L redis-server 这命令我们可以看到redis的安装的文件在那些目录 ...
- 树莓派(raspberry pi)学习11: 将树莓派变成一个Web服务器(转)
将树莓派变成一个Web服务器,通过访问网页,就可以控制树莓派,比如:查看摄像头\开灯等等. 一想到Linux Web服务器,我们首先想到的是,Apache + MySql + Php. 树莓派可以安装 ...
- mvc area出现“找到多个与名为“Home”的控制器匹配的类型”错误的解决方法
出现该问题的原因是在默认的Golbal.asax.cs文件中已经注册了默认路由 public class MvcApplication : System.Web.HttpApplication ...
- 【转】Kotlin 和 Checked Exception
Kotlin 和 Checked Exception 最近 JetBrains 的 Kotlin 语言忽然成了热门话题.国内小编们传言说,Kotlin 取代了 Java,成为了 Android 的“钦 ...
- Oracle中文乱码解决办法总结
AMERICAN_AMERICA.WE8ISO8859P1,这个字符编码是西欧字符编码,对应于.Net的就是iso-8859-1字符编码,所以只需要改到系统的默认字符编码就行了. 解决方法: (1) ...
- Java 8 forEach examples遍历例子
1. forEach and Map 1.1 Normal way to loop a Map. Map<String, Integer> items = new HashMap<& ...
- MySQL积累
从csv文件写入mysql表:从/root/failure.csv读取数据写入表d_disk_failure,每行中的每个项用逗号分割,每个项只取用"包含的内容,如果没有"则取全部 ...