linux 消息队列
来源:互联网 发布:菩提迦耶 知乎 编辑:程序博客网 时间:2024/06/05 21:09
主要使用函数清单:
// 键值构建函数#include <sys/types.h>#include <sys/ipc.h>key_t ftok(const char *pathname, int proj_id);// 创建与获取消息队列函数#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgget(key_t, int msgflg);// 发送消息函数#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);// 接收消息函数#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);// 消息控制函数#include <sys/types.h>#include <sys/ipc.h>#include <sys/msg.h>int msgctl(int msqid, int cmd, struct msqid_ds *buf);
服务端:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <unistd.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/stat.h> #include <sys/msg.h> #define MSG_FILE "server.c" #define BUFFER 255 /*S_IRUSR Permits the file's owner to read it.S_IWUSR Permits the file's owner to write to it.S_IRGRP Permits the file's group to read it.S_IWGRP Permits the file's group to write to it.*/#define PERM S_IRUSR|S_IWUSR struct msgtype { long mtype; char buffer[BUFFER+1]; }; int main() { struct msgtype msg; key_t key; int msgid; // 创建键值if((key=ftok(MSG_FILE,'a'))==-1) { fprintf(stderr,"Creat Key Error:%s\a\n",strerror(errno)); exit(1); } // 创建消息队列if((msgid=msgget(key,PERM|IPC_CREAT|IPC_EXCL))==-1) { fprintf(stderr,"Creat Message Error:%s\a\n",strerror(errno)); exit(1); } while(1) { // 从队列中获取消息msgrcv(msgid,&msg,sizeof(struct msgtype),1,0); fprintf(stderr,"Server Receive:%s\n",msg.buffer); msg.mtype=2; // 发送消息msgsnd(msgid,&msg,sizeof(struct msgtype),0); } exit(0); }
客户端:
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <errno.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/stat.h> #define MSG_FILE "server.c" #define BUFFER 255 #define PERM S_IRUSR|S_IWUSR struct msgtype { long mtype; char buffer[BUFFER+1]; }; int main(int argc,char **argv) { struct msgtype msg; key_t key; int msgid; if(argc!=2) { fprintf(stderr,"Usage:%s string\n\a",argv[0]); exit(1); } if((key=ftok(MSG_FILE,'a'))==-1) { fprintf(stderr,"Creat Key Error:%s\a\n",strerror(errno)); exit(1); } if((msgid=msgget(key,PERM))==-1) { fprintf(stderr,"Creat Message Error:%s\a\n",strerror(errno)); exit(1); } msg.mtype=1; strncpy(msg.buffer,argv[1],BUFFER); msgsnd(msgid,&msg,sizeof(struct msgtype),0); memset(&msg,'\0',sizeof(struct msgtype)); msgrcv(msgid,&msg,sizeof(struct msgtype),2,0); fprintf(stderr,"Client receive:%s\n",msg.buffer); exit(0); }
- Linux消息队列编程
- linux消息队列
- linux消息队列操作
- linux IPC-消息队列
- linux消息队列函数
- Linux消息队列操作
- linux 消息队列
- linux IPC-消息队列
- Linux的消息队列
- Linux消息队列
- Linux消息队列
- linux消息队列
- linux消息队列
- Linux消息队列
- linux 消息队列 实例
- linux操作系统消息队列
- linux 消息队列 实例
- 自学Linux -- 消息队列
- 解决 Ubuntu 下风扇一直高速旋转的方法
- Android系列学习讲座之六--App模块化及工程扩展
- hdu 4091 Zombie’s Treasure Chest 贪心+枚举
- vim配置
- Linux shell各自符合简单介绍
- linux 消息队列
- 设计模式之装饰模式
- c语言数组--插入排序
- CF#204DIV2:A. Jeff and Digits
- Oracle DB RMAN 简单配置
- CF#204DIV2:B. Jeff and Periods
- QQ国际版汉化最简单方法
- tomcat内存溢出配置
- 1005