# Include <stdio. h>
# Include <sys/msg. h>
# Define max_msg_buf_len 512.
Int Ikey = 6004;
Struct ipcmsgbuf
{
Long mtype;
Char mtext [max_msg_buf_len];
};
Int main (void)
{
Int qid;
Char stmp [128], stmp2 [128], stmp3 [128];
Struct ipcmsgbuf msgdata;
Memset (stmp, 0, sizeof (stmp ));
Memset (stmp2, 0, sizeof (stmp2 ));
Memset (stmp3, 0, sizeof (stmp3 ));
If (qid = msgget (Ikey, 0000) <0)
{
Printf ("0000 \ n ");
Qid = msgget (Ikey, ipc_creat | 0660 );
If (qid <0)
{
Printf ("msgget error! \ N ");
Return-1;
}
}
/* Write a message queue */
Memset (& msgdata, 0, sizeof (struct ipcmsgbuf ));
Msgdata. mtype = 1;
Memcpy (msgdata. mtext, "abcdefg", 7 );
Msgsnd (qid, & msgdata, 7, 0 );
/* Write a message queue */
Memset (& msgdata, 0, sizeof (struct ipcmsgbuf ));
Msgdata. mtype = 2;
Memcpy (msgdata. mtext, "1234567", 7 );
Msgsnd (qid, & msgdata, 7, 0 );
/* Read message queue */
Memset (& msgdata, 0, sizeof (struct ipcmsgbuf ));
Msgrcv (qid, & msgdata, 7, 1, 0 );
Memcpy (stmp, msgdata. mtext, 7 );
Printf ("stmp = % s \ n", stmp );
/* Read message queue */
Memset (& msgdata, 0, sizeof (struct ipcmsgbuf ));
Msgrcv (qid, & msgdata, 7, 2, 0 );
Memcpy (stmp2, msgdata. mtext, 7 );
Printf ("stmp2 = % s \ n", stmp2 );
/* Read message queue */
Memset (& msgdata, 0, sizeof (struct ipcmsgbuf ));
Msgrcv (qid, & msgdata, 7, 2, ipc_nowait );
Memcpy (stmp3, msgdata. mtext, 7 );
Printf ("stmp3 = % s \ n", stmp3 );
/* Delete the message queue and all data in the queue from the system */
Msgctl (qid, ipc_rmid, 0 );
Return 0;
}
Running result:
0000
Stmp = abcdefg
Stmp2 = 1234567
Stmp3 =