1. snd 源代码
- #include
-
- #define ERR_MSG(msg) do{\
- fprintf(stderr,"__%d__:",__LINE__);\
- perror(msg);\
- }while(0)
-
- typedef struct{
- long msgtype; //消息类型
- char data[1024]; //消息正文
- }Msg;
-
- #define SIZE sizeof(Msg)-sizeof(long)
-
- int main(int argc, const char *argv[])
- {
- //创建key值
- int key;
- if(-1==(key=ftok("/",'k'))){
- ERR_MSG("ftok error");
- return -1;
- }
-
- //创建消息队列
- int msgid;
- if(-1==(msgid=msgget(key,IPC_CREAT|0664))){
- ERR_MSG("msgget error");
- return -1;
- }
-
- //向消息队列中发送信息
- Msg msg={.msgtype=1};
- while(1){
- printf("请输入消息内容>>>");
- fgets(msg.data,sizeof(msg.data),stdin);
- msg.data[strlen(msg.data)-1]=0;
-
- //将消息发送到消息队列
- if(-1==msgsnd(msgid,&msg,SIZE,0)){
- ERR_MSG("msgsnd error");
- return -1;
- }
-
- //退出
- if(!strcmp(msg.data,"quit")){
- break;
- }
- }
- return 0;
- }
2. rcv 源代码
- #include
-
- #define ERR_MSG(msg) do{\
- fprintf(stderr,"__%d__:",__LINE__);\
- perror(msg);\
- }while(0)
-
- typedef struct{
- long msgtype; //消息类型
- char data[1024]; //消息正文
- }Msg;
-
- #define SIZE sizeof(Msg)-sizeof(long)
-
- int main(int argc, const char *argv[])
- {
- //创建key值
- int key;
- if(-1==(key=ftok("/",'k'))){
- ERR_MSG("ftok error");
- return -1;
- }
- //创建消息队列
- int msgid;
- if(-1==(msgid=msgget(key,IPC_CREAT|0664))){
- ERR_MSG("msgget error");
- return -1;
- }
- //从消息队列中取数据
- Msg msg;
- while(1){
- //接收信息
- if(-1==msgrcv(msgid,&msg,SIZE,0,0)){
- ERR_MSG("msgrcv error");
- return -1;
- }
- printf("rcv:%s\n",msg.data);
- //退出
- if(!strcmp(msg.data,"quit")){
- break;
- }
- }
- //删除消息队列
- msgctl(msgid,IPC_RMID,NULL);
- return 0;
- }