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. JAVA微信公众号网页开发——通过接收人的openid发送模板消息

    TemplateData.java 1 package com.weixin.weixin.template; 2 3 public class TemplateData { 4 private St ...

  2. vue的一些细节

    注意区别 //鼠标滚轮事件 @wheel = "demo"demo()注意执行顺序,用户滚动鼠标滚轮,触发事件执行demo()函数,函数执行完毕后,页面滚动条滚动所以,当demo( ...

  3. windows平台使用 pthreads库

    note 近日封装一些跨平台库时, 发现线程的创建需要做平台的区分, windows的线程创建和Linux下的线程操作不一样.很麻烦,还要做平台区分. 能否在windows上使用pthread的线程库 ...

  4. 【LeetCode】1134. Armstrong Number 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 直接计算 日期 题目地址:https://leetco ...

  5. 【LeetCode】392. Is Subsequence 解题报告(Python)

    [LeetCode]392. Is Subsequence 解题报告(Python) 标签: LeetCode 题目地址:https://leetcode.com/problems/is-subseq ...

  6. 【安卓】AndroidStudio使用本地gradle进行build的配置

    1.修改setting使用local gradle2.将下载的gradle-6.7.1-all.zip放入E:/AndroidProject文件夹 修改gradle-wapper.propertie使 ...

  7. 很漂亮的一个背景控件——ribbons.js

    写博客的人都喜欢优化自己的博客主页,博主也一样,找了一些背景控件,像canvas-nest.js等等,最终选择了ribbons.js,并基于源码,稍作了一丁点的修改,这里分享出来 (function ...

  8. 使用VUE组件创建SpreadJS自定义单元格(一)

    作为近五年都冲在热门框架排行榜首的Vue,大家一定会学到的一部分就是组件的使用.前端开发的模块化,可以让代码逻辑更加简单清晰,项目的扩展性大大加强.对于Vue而言,模块化的体现集中在组件之上,以组件为 ...

  9. vue - 搭建 webapp 自适应项目-使用 vant 组件库 并 可自动调节大小

    1.创建个vue 项目,这里不详细写怎么创建,参考 vue - 指令创建 vue工程 - 岑惜 - 博客园 (cnblogs.com) https://www.cnblogs.com/c2g52013 ...

  10. 第10组 Alpha冲刺 (4/6)

    1.1基本情况 ·队名:今晚不睡觉 ·组长博客:https://www.cnblogs.com/cpandbb/p/13982696.html ·作业博客:https://edu.cnblogs.co ...