Linux进程间通信可以采用的方法很多,例如“管道”、“信号”、“共享内存”、“消息队列”、“套接字”等等。不过,我个人比较喜欢“消息队列”。 消息队列和管道相比,至少有以下几个特点: (1)消息队列是双向、双工的。 (2)如果进程数量较多,要互相通信,如果采用管道的话,要创建很多个管道文件。 (3)消息队列先天就是“异步”操作,例如A进程丢进去,B进程再读出来。A丢进去后,A还可以做其他事。不用管B什么时候去读。
例如: 消息发送函数 int SendMSG(int mqid,long mtype,std::string _msg) { struct UMMessage msg; strcpy(msg.mtext,_msg.data()); msg.mtype=mtype; msgsnd(mqid,&msg,strlen(msg.mtext)+1,0); return 1; } |
(4)消息的读取操作是阻塞方式的,在多线程编程里,相当的省事
例如: 我们启用一个专门的线程来接收消息 void *pthread_MsgHandle(void *arg) { int mqid = *((int *) arg); struct UMMessage msg; while (1) { //接收消息,根据 KB_MSG 过滤 int ret = msgrcv(mqid, &msg, MSG_TXT_LEN, KB_MSG, 0); if (ret > 0) { //处理消息 MessageProcessing(mqid, msg.mtext); } } return (void*) (1); } |
那么现在进入正题,谈谈需求。 假设现在有6个进程,相互之间要互相通信。 进程名称依次是:A、B、C、D、E、F 例如:A要发送消息给B、C、D B要发送消息给D、E、F、A C要发送消息给D、E、F 。。。。。等等。。。。 可能性实在太多。。。 我们现在用消息队列就是要解决这个问题。问题看上去很难,实际上只要好好思考,就发现用消息队列很简单。怎么思考呢? 首先,要创建一个消息队列。 然后做好消息接收【通道】定义。例如: #define CH_A 1 #define CH_B 2 #define CH_C 3 #define CH_D 4 #define CH_E 5 #define CH_F 6总之你有多少个进程要共用这个消息队列,你就定义多少个。
Fedora 16 自定义开机运行脚本RedHat Enterprise Linux 5 最小系统安装[图片]相关资讯 Linux教程
- Linux教程:如何在命令行中查看目 (07/28/2014 12:22:23)
- Linux 修改root密码 (11/03/2012 07:53:38)
- su - root 与su root的区别 (06/06/2012 00:39:40)
| - Linux进程间通信:消息队列 (01/28/2013 09:43:00)
- U盘安装Linux开机无法启动解决方法 (10/07/2012 08:55:52)
- Windows 7/Linux 同步时间 (05/15/2012 06:17:55)
|
本文评论 查看全部评论 (0)