Linux消息队列实现进程间通信
#ifndef _COMM_H_
#define _COMM_H_
#ifndef _COMM_H_
#define _COMM_H_#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>#define PATHNAME "."
#define PROJ_ID 0x666#define SERVER_TYPE 1
#define CLIENT_TYPE 2//自定义一个缓冲区用来暂时存储发送或者接收的数据
struct msgbuf
{long mytype;char mtext[1024];
};
int createMsgQueue();
int getMsgQueue();
int destroyMsgQueue(int msgid);
int sendMsg(int msgid, int type, char *msg);
int recvMsg(int msgid, int recvType, char out[]);
#endif
#include "comm.h"//创建或者打开消息队列
static int commMsgQueue(int flag)
{key_t key = ftok(PATHNAME, PROJ_ID);if(key < 0){perror("ftok");return -1;}//根据flag的不同选择打开还是创建int msgid = msgget(key, flag);if(msgid < 0){perror("msgget");return -2;}return msgid;
}
int createMsgQueue()
{return commMsgQueue(IPC_CREAT|IPC_EXCL|0666);
}
int getMsgQueue()
{return commMsgQueue(IPC_CREAT);
}
int destroyMsgQueue(int msgid)
{//删除消息队列if(msgctl(msgid, IPC_RMID, NULL)<0){perror("msgctl");return -1;}return 0;
}
//发送消息(参数:发送者,发送内容的类型,发送的内容)
int sendMsg(int msgid, int who, char *msg)
{//buf 自定义的缓冲区,用来暂存数据struct msgbuf buf;buf.mytype = who;strcpy(buf.mtext, msg);//进行发送,将缓冲区中的数据进行发送if(msgsnd(msgid, (void *)&buf, sizeof(buf.mtext), 0) < 0){perror("msgsnd");return -1;}return 0;
}
//接收消息(参数:接受者,接受类型,接受之后存放位置)
int recvMsg(int msgid, int who, char out[])
{struct msgbuf buf;buf.mytype = who;//接收数据,将接收的数据写入到缓冲区中if(msgrcv(msgid, (void *)&buf, sizeof(buf.mtext), recvType, 0)< 0){perror("msgrcv");return -1;}//将数据从缓冲区存放到指定位置strcpy(out, buf.mtext);return 0;
}
#include"comm.h"
int main()
{//服务器端进行消息队列的创建int msgid = createMsgQueue();//缓冲区char buf[1024];while(1){buf[0] = 0;//接受客户端发送的消息recvMsg(msgid, CLIENT_TYPE, buf);printf("client # %s\n", buf);printf("please enter: ");fflush(stdout);//从标准输入输入内容到缓冲区ssize_t s = read(0, buf, sizeof(buf));if(s > 0){buf[s-1] = 0;//将缓冲区内容发送至客户端sendMsg(msgid, SERVER_TYPE, buf);printf("send done...\n");}}//服务器端创建,服务器端销毁消息队列destoryMsgQueue(msgid);return 0;
}
#include "comm.h"
int main()
{//打开消息队列int msgid = getMsgQueue();//缓冲char buf[1024];while(1){buf[0] = 0;printf("please enter:");fflush(stdout);//从标准输入输入到缓冲ssize_t s = read(0, buf, sizeof(buf));if(s>0){buf[s-1] = 0;//将缓冲发送到服务器sendMsg(msgid, CLIENT_TYPE, buf);printf("send done...\n");}//接受服务器的回应recvMsg(msgid, SERVER_TYPE, buf);printf("Server : %s\n", buf);}return 0;
}
Linux消息队列实现进程间通信相关推荐
- PHP下操作Linux消息队列完成进程间通信的方法
2019独角兽企业重金招聘Python工程师标准>>> 来源:http://www.jb51.net/article/24353.htm 关于Linux系统进程通信的概念及实现可查看 ...
- linux 消息队列_Linux进程间通信第六讲 标准IPC之消息队列
来源CSDN: CSDN-专业IT技术社区-登录blog.csdn.net 一.概念和原理 消息队列是另一种标准IPC,当然也大概遵循大部分标准 消息队列,它是存放消息(数据)的队列,而队列是先进先 ...
- linux 消息队列 msgget/msgsnd/msgrecv
专栏内容:linux下并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息:地势坤,君子以厚德载物. 目录 前言 概述 原理 消息队列的大小 查看资源 接口 代码演示 结尾 前言 本专栏主要分 ...
- linux消息队列非亲缘,linux进程
linux进程Tag内容描述: 1.linux消息队列进程通信 一.消息队列的基本概念消息队列(也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一.另外两种是信号灯和共享内存.这些IPC机制 ...
- linux.调整收发队列,linux消息队列通信
程序目的:学习linux消息队列通信 所用主要函数:msgget(),msgsnd(),msgrcv(),msgctl() 首先介绍每个函数的用法: (1)msgget 使用格式: #include ...
- linux 消息对lie_Linux进程间通信之消息队列总结
一.系统V IPC 三种系统V IPC:消息队列.信号量以及共享内存(共享存储器)之间有很多相似之处. 每个内核中的 I P C结构(消息队列.信号量或共享存储段)都用一个非负整数的标识符( i d ...
- [Linux]消息队列
我们知道进程间通信的方法有多种,主要有管道,消息队列,信号量,共享内存,socket等.之前介绍过管道,今天再介绍一个新的概念–消息队列. 消息队列:将一个进程到另一个进程之间发送数据块的方式.这些发 ...
- Linux消息队列原理与应用
消息队列 (也叫做报文队列)是Unix系统V版本中3种进程间通信机制之一.另外两种是信号灯和共享内存.这些IPC机制使用共同的授权方法.只有通过系统调用将标志符传递给核心之后,进程才能存取这些资源.这 ...
- LINUX 消息队列的容量探讨
在LINUX进程间通信方法有很多种,其中有消息队列.信号量.共享内存,而这三种进程间通信方法又分为System V IPC 和 POSIX IPC 两类. 接下来要探讨的是POSIX的消息对列(实际编 ...
- php 阻塞消息队列,linux 消息队列阻塞
php 使用socket告知Python,可以在socket上声明是及时推送还是延迟推送######哦?愿闻其详 那要是很多用户同时并发呢######system 调用外部程序是一种办法######@ ...
最新文章
- windows7 php 无法启动服务,windows update服务无法启动怎么解决?
- 【java】兴唐第十九节课(内部类)
- 女性程序员大会ghc_在女性科技大会上成为男人的感觉
- 《最受欢迎的女友职业排行榜Top10》
- sidekiq安装及使用
- linux查看etl进程,常见ETL工具
- java 虚拟机初始堆_了解java虚拟机—堆相关参数设置(3)
- web前端学习笔记(二)---Django
- 普通话转粤语_语音转文字评测:几款语音转文字app,你了解多少?
- 软件测试全套教程,软件测试自学线路图
- PC机组成——主板、芯片组与BIOS
- 基于springCloud gateway请求包含url包含{}大括号特殊字符的问题
- gc算法 java_Java的GC机制及算法
- 实战:k8s之Longhorn备份恢复-2022.2.26
- 高等数学(第七版)同济大学 习题12-4 个人解答
- CS很难发论文?这些技巧你都get了吗?
- DKN: Deep Knowledge-Aware Network for News Recommendation简析
- 百鸡百钱python教程_python百钱百鸡
- 2020美赛C题解题思路(A Wealth of Data)
- 外卖跑腿APP开发的优势和功能