linux进程通信:消息队列
2016-04-26 21:23
681 查看
消息队列可以实现两个没有关系的进程之间的通信。
创建了一个消息队列后,进程可以往里面放消息,也可以取消息。因为这个消息队列是有名字的,所以就算是两个没有关系的进程,也能通信。
而且人性化的一点是,可以自己定义消息的结构体。
几个重要的函数:
效果图:
Server的代码:(用于取消息)
Client.c的代码:(用于发消息)
创建了一个消息队列后,进程可以往里面放消息,也可以取消息。因为这个消息队列是有名字的,所以就算是两个没有关系的进程,也能通信。
而且人性化的一点是,可以自己定义消息的结构体。
几个重要的函数:
//创建消息队列,如果存在就直接获取 int msgget(key_t, key, int msgflg); //第一个参数是key整形,用于区分不同的队列 //返回key命名的队列id,唯一标识一个队列 //发送消息 int msgsend(int msgid, const void *msg_ptr, size_t msg_sz, int msgflg); //msgid是标识队列的id //msg_ptr是自己定义的消息结构体,注意结构体里面是长整型开始 //所以要定义成这样 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); //参数跟上面一样
效果图:
Server的代码:(用于取消息)
#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[256]; }; int main(){ int msgid = -1; struct msg_st data; long int msgtype = 0; msgid = msgget((key_t)1234,IPC_CREAT); if(msgid == -1){ printf("msgget failed\n"); exit(EXIT_FAILURE); } printf("Server start!\n"); while(1){ if(msgrcv(msgid, (void*)&data, 256, msgtype, 0) == -1){ printf("msgrcv failed\n"); exit(EXIT_FAILURE); }//end if //success printf("from client:%s\n",data.text); }//end while }
Client.c的代码:(用于发消息)
#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[256]; }; int main(){ struct msg_st data; int msgid = -1; char buffer[256]; memset(buffer,'\0',256); msgid = msgget((key_t)1234,IPC_CREAT); if(msgid == -1){ printf("msgget failed\n"); exit(EXIT_FAILURE); } while(1){ printf("Enter a string\n"); fgets(buffer,256,stdin); strcpy(data.text,buffer); data.msg_type=1; msgsnd(msgid, (void*)&data,256, 0); } }
相关文章推荐
- Linux 小笔记
- linux那点事儿(七)----文件系统管理
- centos 局域网时间同步设置
- centos7之lnmp安装
- linux之dd命令
- Linux 中的五种 IO 模型
- Linux 文件系统的目录结构
- 在虚拟机扩展linux系统的硬盘
- CSAPP(2):程序的汇编表示(Linux版)
- linux常用命令
- 每天一点Linux-Makefile
- 《Python入门》Linux 下 Python Web开发环境搭建笔记
- linux定时任务crond那些事! 【转】
- 在linux中添加环境变量
- linux下动态链接库解决方案(二)
- 在centos 6.2,python2.7 下安装QT 4.8.3,pyqt 4.9.5 详细步骤
- mooc linux学习总结
- centos7之lamp环境搭建
- Linux内核分析期中总结
- Linux--Condition Variable(条件变量)实现生产者-消费者模型 、读写锁