#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSGKEY 1234
int msgid;
typedef struct
{
long mtype;
char msgbuf[100];
}msg_t;
void *TaskRecv(void *arg)
{
msg_t msg;
while(1)
{
if(-1==msgrcv(msgid, &msg, sizeof(msg_t), 2, 0))
{
printf("msgrcv.error");
break;
}
printf("msgrcv.%d.%s", msg.mtype, msg.msgbug);
}
}
void *TaskSend(void *arg)
{
msg_t msg;
int loop_cnt=0;
while(1)
{
msg.mtype=loop_cnt;
sprintf(msg.msgbug, "%d", loop_cnt);
if(-1==msgsnd(msgid, &msg, sizeof(msg_t), 0))
{
printf("msgrcv.error");
break;
}
printf("msgsnd.%d.%s", msg.mtype, msg.msgbug);
sleep(1);
}
}
int main()
{
pthread_t tid[2];
msgid=msgget(MSGKEY, IPC_CREAT|IPC_EXCL);
pthread_create(&tid[0],NULL,TaskRecv,NULL);
pthread_create(&tid[1],NULL,TaskSend,NULL);
getchar();
return 0;
}