linuxIPC之消息队列

来源:互联网 发布:3d打印 软件 编辑:程序博客网 时间:2024/06/05 08:38

吐舌头发送端

/*************************************************************************> File Name: msgsnd.c> Author: XXDK> Email: v.manstein@qq.com > Created Time: Mon 20 Mar 2017 12:24:01 AM PDT ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/msg.h>#include<errno.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>typedef struct msg{long mtype;int a;char c;}msg_t;int main(){int msgid;key_t key;msg_t mymsga;msg_t mymsgb;mymsga.mtype = 1;mymsga.a = 88;mymsga.c = 'a';mymsgb.mtype = 2;mymsgb.a = 99;mymsgb.c = 's';key = ftok("./.", 100);msgid = msgget(key, IPC_CREAT|IPC_EXCL|0666);if(msgid == -1) {if(errno == EEXIST) {msgid = msgget(key, 0666);} else {perror("fail to msgget");}}msgsnd(msgid, &mymsga, sizeof(mymsga) - sizeof(long), 0);msgsnd(msgid, &mymsgb, sizeof(mymsgb) - sizeof(long), 0);printf("send message ok\n");return 0;}

吐舌头接受端

/*************************************************************************> File Name: msgrcv.c> Author: XXDK> Email: v.manstein@qq.com > Created Time: Mon 20 Mar 2017 12:24:01 AM PDT ************************************************************************/#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/msg.h>#include<errno.h>#include<fcntl.h>#include<sys/types.h>#include<sys/stat.h>typedef struct msg{long mtype;int a;char c;}msg_t;int main(){int msgid;key_t key;msg_t mymsg;key = ftok("./.", 100);msgid = msgget(key, IPC_CREAT|IPC_EXCL|0666);if(msgid == -1) {if(errno == EEXIST) {msgid = msgget(key, 0666);} else {perror("fail to msgget");}}system("ipcs -q");msgrcv(msgid, &mymsg, sizeof(mymsg) - sizeof(long), (long)1, 0);printf("mymsg: %d %c\n", mymsg.a, mymsg.c);system("ipcs -q");msgrcv(msgid, &mymsg, sizeof(mymsg) - sizeof(long), (long)2, 0);printf("mymsg: %d %c\n", mymsg.a, mymsg.c);system("ipcs -q");msgctl(msgid, IPC_RMID, NULL);return 0;}



0 0