linux 消息队列小例子
2012-11-30 11:21
369 查看
网上也有些例子,看了之后,通过自己的理解改改,就有了下面的代码。模拟银行查询余额系统。
头文件:
服务器端代码:
客户端代码:
头文件:
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/stat.h> #define KEY_VALUE 0x888 #define MSG_TYPE1 123 #define MSG_TYPE2 456 #define MSG_LEN 100 static struct msgbuf { long mtype; //正的消息类型 char acount; //帐号 char name[MSG_LEN]; //帐户姓名 char balance[MSG_LEN];//帐户余额 }sndbuf, rcvbuf, *msgp;
服务器端代码:
#include "msg.h" int main() { int rtrn, msqid; if ( (msqid = msgget(KEY_VALUE, IPC_CREAT | 0660)) == -1) { perror("msgget "); exit(-1); } while(1) { /* 接收客户端的消息 */ msgp = &rcvbuf; printf("等待前台进程的请求....\n"); rtrn = msgrcv(msqid, msgp, sizeof(struct msgbuf), MSG_TYPE1, MSG_NOERROR);//MSG_NOERROR,若消息长度大于MSG_LEN,则截短多余的字节 if(rtrn == -1) { perror("msgrcv"); exit(-1); } /* 向客户端发送消息 */ msgp = &sndbuf; msgp->mtype = MSG_TYPE2; printf("\n请输入帐号%4.4s的帐户姓名:", &rcvbuf.acount); scanf("%s", sndbuf.name); printf("请输入该帐户余额 : "); scanf("%s", sndbuf.balance); rtrn = msgsnd(msqid, msgp, sizeof(struct msgbuf), 0); if (rtrn == -1) { perror("msgsnd"); exit(-1); } } return 0; }
客户端代码:
#include "msg.h" int main(int argc, char **argv) { int rtrn, msqid; if ((msqid = msgget(KEY_VALUE, IPC_CREAT | 0660)) == -1)//创建一个消息队列,键值为KEY_VALUE,也可用ftok()也生成一个键值,用户和组可读写 { perror("msgget "); exit(-1); } /* 给服务器发送消息 */ msgp = &sndbuf; msgp->mtype = MSG_TYPE1; printf("输入4位帐号 : "); scanf("%s", &sndbuf.acount); rtrn = msgsnd(msqid, msgp, sizeof(struct msgbuf), 0); if (rtrn == -1) { perror("msgsnd "); exit(-1); } /* 接收服务器的消息 */ msgp = &rcvbuf; printf("等待后台数据处理进程的回答....\n"); rtrn = msgrcv(msqid, msgp, sizeof(struct msgbuf), MSG_TYPE2, 0); if(rtrn == -1) { perror("msgrcv "); exit(-1); } printf("\n姓名 : %s\n", rcvbuf.name); printf("余额 : %s\n", rcvbuf.balance); return 0; }
相关文章推荐
- Linux下消息队列小例子
- php linux下使用消息队列的例子
- linux消息队列例子(msgsnd msgget)
- linux 消息队列例子
- linux 消息队列例子
- linux下消息队列小例子
- Linux进程间通信——使用消息队列
- linux 消息队列使用1
- linux 消息队列简单例程
- 一个com+消息队列的例子
- linux系统增加消息队列长度
- linux消息队列的应用
- PHP下操作Linux消息队列完成进程间通信的方法
- Linux环境进程间通信(三):消息队列
- linux消息队列编程实例
- linux消息队列
- linux消息队列
- Linux进程间通信——使用消息队列
- Linux进程间通信之信号量(semaphore)、消息队列(Message Queue)和共享内存(Share Memory)
- 学习linux消息队列通信