This examples are made two programs.
rcvmsg.c
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <string.h> main() { int msqid; key_t msgkey; struct msgbuf{ long mtype; char mdata[256]; }; struct msgbuf msgdata,*p; p = &msgdata; // Make Message queue key. msgkey = ftok("msgq.key",'X'); // Get Message queue ID. msqid = msgget(msgkey,IPC_CREAT|0666); // Message receive loop wile get "END" massage. while(1) { // Receive a Message. if(msgrcv(msqid,p,sizeof(p->mdata),0,IPC_NOWAIT)<=0) { printf("No message\n"); sleep(3); continue; } printf("message received from %ld\n%s\n",p->mtype,p->mdata); if(strncmp((char*)p->mdata, "END", (size_t)3)==0) break; } // Remove Message Queue msgctl(msqid, IPC_RMID, 0); }
"rcvmsg" functions.
1. Create message queue.
2. Waiting receive a message. It continue until "END" receiving.
3. Remove message queue.
sndmsg.c
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> main() { int msqid; key_t msgkey; struct msgbuf{ long mtype; char mdata[256]; }; struct msgbuf msgdata,*p; // Make Message queue key. msgkey = ftok(argv[1], 'X'); // Get Message queue ID. (Only get existing message queue.) msqid = msgget(msgkey, 0666); printf("QID = %d\n", msqid); if(msqid<0) return; p = &msgdata; printf("Enter message: "); fflush(stdin); fgets(p->mdata,BUFSIZ,stdin); p->gtmtype = getpid(); // Message send. msgsnd(msqid,p,sizeof(p->data),0); }"sndmsg" functions.
1. Create message queue. If message queue don't exist then quit self.
2. Wait user input message.
3. Send a message.
"sndmsg" send "END" message when "rcvmsg" is going to final.
No comments:
Post a Comment