my_semqueue_send.c:

#include<stdio.h>
#include<errno.h>
#include<mqueue.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
void p_error(const char* str)
{
perror(str);
exit(1);
}
int main(int argc,char* argv[])
{
mqd_t mq=mq_open("/my_queue",O_WRONLY|O_CREAT,0666,NULL);
//创建一个消息队列,默认保存在/dev/myqueuue,(为了跨平台可移植性的需要,加/)
if(mq==-1)
{
p_error("mq_open failed");
}
printf("my_queue open success\n");
int i=0,ret;
char buf[100]="我是消息队列,接下来我要发送消息了";
while(1)
{
ret=mq_send(mq,buf,strlen(buf),0);
//第三个参数表示优先级,为0则为系统默认设置
if(ret==-1)
{
p_error("发送失败");
}
printf("发送成功\n");
sleep(1);
} ret=mq_close(mq);
if(ret==-1)
{
p_error("关闭信号量失败");
}
ret=mq_unlink("/my_queue");
if(ret==-1)
{
p_error("删除信号失败");
} return 0;
}

my_semqueue_receive.c:

#include<stdio.h>
#include<errno.h>
#include<mqueue.h>
#include<fcntl.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
void p_error(const char* str)
{
perror(str);
exit(1);
}
int main(int argc,char* argv[])
{
mqd_t mq=mq_open("/my_queue",O_RDONLY,0666,NULL);
//注意这里的第二个参数要为科=可读
if(mq==-1)
{
p_error("mq_open failed");
}
printf("my_queue open success\n");
int i=0,ret;
char *buf;
unsigned int prio; ret=mq_getattr(mq,&attr); //获取消息队列的属性 if(ret<0)
{
p_error("获取消息队列属性失败");
} printf("消息队列默认属性--------\n");
printf("阻塞方式(0:非阻塞.1:阻塞)%ld\n",attr.mq_flags);
printf("消息队列最大接受的消息条数:%ld\n",attr.mq_maxmsg);
printf("消息队列中每条消息最大字节数:%ld\n",attr.mq_msgsize);
printf("----------------------\n"); //根据消息队列中的消息条数动态分配内存
buf=(char*)malloc(sizeof(attr.mq_msgsize)); if(NULL==buf)
{
p_error("申请失败");
}
while(1)
{
ret=mq_receive(mq,buf,attr.mq_msgsize,&prio);
//第三个参数的大小不能小于消息队列msgsize if(ret==-1)
{
p_error("接受失败");
} printf("接收到%d个字节,缓冲区的数据为:%s\n",ret,buf);
sleep(1);
} mq_close(mq);
mq_unlink("/my_queue"); return 0;
}

POSIX之消息队列的更多相关文章

  1. 消息队列接口API(posix 接口和 system v接口)

    消息队列 posix API 消息队列(也叫做报文队列)能够克服早期unix通信机制的一些缺点.信号这种通信方式更像\"即时\"的通信方式,它要求接受信号的进程在某个时间范围内对信 ...

  2. linux网络编程之posix消息队列

    在前面已经学习了System v相关的IPC,今天起学习posix相关的IPC,关于这两者的内容区别,简单回顾一下: 而今天先学习posix的消息队列,下面开始: 接下来则编写程序来创建一个posix ...

  3. 【windows 操作系统】进程间通信(IPC)简述|无名管道和命名管道 消息队列、信号量、共享存储、Socket、Streams等

    一.进程间通信简述 每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之间要交换数据必须通过内核,在内核中开辟一块缓冲区,进程1把数据从用户空间拷到内核缓冲区,进 ...

  4. 003:Posix IPC的消息队列

    1:与FIFO相比,FIFO要求对一个管道写入之前,必须有进程进行读打开.消息队列则不需要有进行在队列上等待消息的到达. 2:POSIX每次读取总是返回优先级最高的,system V则可以返回任意优先 ...

  5. Linux IPC POSIX 消息队列

    模型: #include<mqueue.h> #include <sys/stat.h> #include <fcntl.h> mq_open() //创建/获取消 ...

  6. Posix消息队列

    转载于:http://blog.csdn.net/zx714311728/article/details/53197196 1.消息队列 消息队列可以认为是一个消息链表,消息队列是随内核持续的.队列中 ...

  7. 第5章 Posix 消息队列

    5.1 概述 消息队列可以认为是一个链表.有写权限的线程可往消息队列中放置消息,有读权限的线程可以从消息队列中取走消息. 消息队列和管道/FIFO的区别: (1)消息队列往一个队列中写消息前,并不需要 ...

  8. posix 消息队列

    注意 在涉及到posix消息的函数时, gcc 编译时要加-lrt参数, 如 gcc -lrt unpipc.c mqpack.c send.c -o send gcc -lrt unpipc.c m ...

  9. POSIX和SYSTEM的消息队列应该注意的问题

    首先看看POSIX的代码: 1.posix_mq_server.c #include <mqueue.h>#include <sys/stat.h>#include <s ...

随机推荐

  1. uniapp框架如何实现仿微信相册:图视频过滤、相册选择功能

    今天我们分享基于uniapp + vue实现仿微信相册插件实例,该插件完全还原了微信相册的功能 1: 相册选择 2: 图片,视频类型过滤 3: 自定义相册界面UI 技术实现 开发环境:Hbuilder ...

  2. cmake之生成动态库

    演示源码下载地址: https://github.com/mohistH/demo_cmake_dylib 把文仅为参考. 以实际情况为准 1.目录结构 │ CMakeLists.txt │ inde ...

  3. 【LeetCode】734. Sentence Similarity 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 只修改区间起终点 日期 题目地址:https://le ...

  4. 【LeetCode】232. Implement Queue using Stacks 解题报告(Python & Java)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Python解法 Java解法 日期 [LeetCo ...

  5. 使用zTree插件实现可拖拽的树

    在目前接触到的树插件中,我觉得zTree比较简单,也容易上手.有一次业务需求是将某对象分组树上的对象可以随意拖拽,相当于改变了对象的分组,因此我用到了zTree,对其进行了一些列学习.         ...

  6. null和空字符串对于查询where条件语句的影响

    在数据库中我们进行数据处理的过程中,对于null值或者空字符串的情况对于这种数据我们进行计算平均值以及查询过程中如何进行对于这类数据的处理呢? step1:建表:create table a(id i ...

  7. Java初学者作业——编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额。

    返回本章节 返回作业目录 需求说明: 编写Java程序, 实现根据用户购买商品总金额, 计算实际支付的金额及所获得的购物券金额. 购买总金额达到或超过 1000元,按 8折优惠,送 200元的购物券: ...

  8. git中submodule子模块的添加、使用和删除

    git中submodule子模块的添加.使用和删除   原文链接:https://blog.csdn.net/guotianqing/article/details/82391665背景项目中经常使用 ...

  9. .net core集成使用EasyNetQ来使用rabbitmq

    之前有写到一篇介绍EasyNetQ的博文(C# .net 使用rabbitmq消息队列--EasyNetQ插件介绍),所以本文从.net core的角度去继承使用EasyNetQ,而用法类似于之前集成 ...

  10. 把rocksdb配置成leveldb

    将rocksdb配置成leveldb 1.配置方法 配置方式有三种: 第一种适合进行性能测试对比:是以参数形式在运行db_bench或ycsb-c的时候以参数形式将rocksdb将其配置成leveld ...