Linux进程间通信——使用消息队列
- int msgget(key_t, key, int msgflg);
- int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg);
- 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);
- int msgctl(int msgid, int command, struct msgid_ds *buf);
- struct msgid_ds
- {
- uid_t shm_perm.uid;
- uid_t shm_perm.gid;
- mode_t shm_perm.mode;
- };
- #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[BUFSIZ];
- };
- int main()
- {
- int running = 1;
- int msgid = -1;
- struct msg_st data;
- long int msgtype = 0; //注意1
- //建立消息队列
- msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
- if(msgid == -1)
- {
- fprintf(stderr, "msgget failed with error: %d\n", errno);
- exit(EXIT_FAILURE);
- }
- //从队列中获取消息,直到遇到end消息为止
- while(running)
- {
- if(msgrcv(msgid, (void*)&data, BUFSIZ, msgtype, 0) == -1)
- {
- fprintf(stderr, "msgrcv failed with errno: %d\n", errno);
- exit(EXIT_FAILURE);
- }
- printf("You wrote: %s\n",data.text);
- //遇到end结束
- if(strncmp(data.text, "end", 3) == 0)
- running = 0;
- }
- //删除消息队列
- if(msgctl(msgid, IPC_RMID, 0) == -1)
- {
- fprintf(stderr, "msgctl(IPC_RMID) failed\n");
- exit(EXIT_FAILURE);
- }
- exit(EXIT_SUCCESS);
- }
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #include <sys/msg.h>
- #include <errno.h>
- #define MAX_TEXT 512
- struct msg_st
- {
- long int msg_type;
- char text[MAX_TEXT];
- };
- int main()
- {
- int running = 1;
- struct msg_st data;
- char buffer[BUFSIZ];
- int msgid = -1;
- //建立消息队列
- msgid = msgget((key_t)1234, 0666 | IPC_CREAT);
- if(msgid == -1)
- {
- fprintf(stderr, "msgget failed with error: %d\n", errno);
- exit(EXIT_FAILURE);
- }
- //向消息队列中写消息,直到写入end
- while(running)
- {
- //输入数据
- printf("Enter some text: ");
- fgets(buffer, BUFSIZ, stdin);
- data.msg_type = 1; //注意2
- strcpy(data.text, buffer);
- //向队列发送数据
- if(msgsnd(msgid, (void*)&data, MAX_TEXT, 0) == -1)
- {
- fprintf(stderr, "msgsnd failed\n");
- exit(EXIT_FAILURE);
- }
- //输入end结束输入
- if(strncmp(buffer, "end", 3) == 0)
- running = 0;
- sleep(1);
- }
- exit(EXIT_SUCCESS);
- }
转载于:https://www.cnblogs.com/daochong/p/6993231.html
Linux进程间通信——使用消息队列相关推荐
- c语言系统编程八:Linux进程间通信之消息队列
Linux进程间通信之消息队列 一 消息队列概述 二 消息队列的特点 三 消息队列的创建和使用 3.1 获取系统唯一的key值 3.2 创建消息队列 3.3 查看消息队列和删除消息队列的shell命令 ...
- Linux进程间通信(IPC)-------消息队列
消息队列是进程间通信的一种方法,他有两个操作,一个进程来发送消息(也就是向内存中写入数据),另一个是获取消息(也就是另外一个进程在内存中读取数据) 下面来看消息队列的 创建,写入,读取等需要用到的函数 ...
- linux 进程uhxuhao,linux 进程间通信三 消息队列以及实例
转自 http://blog.csdn.net/liang890319/article/details/8280934 代码来自:嵌入式Linux应用开发标准教程 消息可以理解为写信给某个人,这里在应 ...
- linux进程间通信:消息队列实现双端通信
双端通信描述 利用消息队列针对发送接受消息的类型唯一性 进行多个客户端之间消息传递,而不需要server端进行消息转发. 同时消息队列的读阻塞和写阻塞特性(消息队列中已经写入数据,如果再不读出来,则无 ...
- linux 消息对lie_Linux进程间通信之消息队列总结
一.系统V IPC 三种系统V IPC:消息队列.信号量以及共享内存(共享存储器)之间有很多相似之处. 每个内核中的 I P C结构(消息队列.信号量或共享存储段)都用一个非负整数的标识符( i d ...
- linux消息通信无法接收,进程间通信:消息队列有关问题:进程1接收不到进程2的消息...
进程间通信:消息队列有关问题:进程1接收不到进程2的消息 进程间通信:消息队列有关问题:进程1接收不到进程2的消息 日期:2014-05-16 浏览次数:20365 次 进程间通信:消息队列问题:进程 ...
- 进程间通信之消息队列
一.什么是消息队列 unix早期通信机制之一的信号能够传送的信息量有限,管道则只能传送无格式的字节流,这无疑会给应用程序开发带来不便.消息队列(也叫做报文队列)则克服了这些缺点. 消息队列就是一个消息 ...
- Linux系统中消息队列,共享内存、信号和线程的基本操作使用方法
Linux系统中消息队列,共享内存.信号和线程高级操作 第十一章 消息队列 10.1消息队列定义 10.2 消息队列特点 10.3 key值 10.4 创建消息队列 10.4.1 发送消息 10.4. ...
- linux软中断和消息队列结合,传统UNIX进程间通信内核实现概要
1概述 大型的应用系统,有两种方式可以建立: 1.通过一个孤立的.大型的.复杂的进程实现全部功能:如见日益复杂,规模庞大,该方法已不现实 2.通过若干相互联系的.小型的.相对简单的进程构成的组合来提供 ...
最新文章
- 01-HTML基础与进阶-day6-录像281
- git中找回丢失的对象
- java代码编译之后是如何运行的?不知道这些,面试官问你jvm问题,你只能懵圈
- 【英语学习】【Level 07】U01 Making friends L1 New kid on the block
- Promise 解决同步请求问题
- Linux(Ubuntu)使用日记------自定义命令的使用
- python总结与思考_学Python很久但是一直无法提升!你有思考过究竟是为什么吗?...
- java 两点间距离_Java实现控制台输出两点间距离
- dw新建一个html网页,Dreamweaver创建网页的基本方法
- 数据分析实战项目--链家租房数据可视化分析
- 嘿~全流程带你基于Pytorch手撸图片分类“框架“--HuClassify
- Linux怎么样修改文件编码,Linux下批量修改文件编码
- c语言d6d0,【单选题】汉字中的十六进制的机内码是D6D0H,那么它的国标码是(·) x2012
A. 5650H B. 5651H C. 5653H D. 5654H...
- 拖拉机(寒假每日一题 4)
- qcustomplot时间坐标轴画直线_QCustomplot使用分享(六) 坐标轴和网格线
- 七个千僖年数学难题与希尔伯特二十三个问题
- 如何用计算机制作探测器,自制自制金属探测器
- 九月英语——梦开始的地方
- 关注:截至2008年Linux相关技术被中国企业申请专利情况汇总
- 【原】Oracle 11.2.0.1 64bit for RHEL6.0 Server x86_64 静默安装