#include "stdio.h"
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
pthread_t pthread_send;
pthread_t pthread_rcv;
struct message_lxl{
int a;
char *buff;
} ;
int msg_sndfd=0;
int msg_sndret=0;
int send_count=0;
struct message_lxl t_message_send;
int pthread_ret;
static void pthread_sendTask()
{
t_message_send.a =1;
msg_sndfd = msgget(1000,0666|IPC_CREAT);
if(msg_sndfd<0)
{
printf(" pthread_sendTask create 1000 msg fail\n");
}
while(1)
{
//msg_sndret= msgsnd(msg_sndfd,(void *)(&t_message_send),100,IPC_NOWAIT);// 当队列满时返回错误标志
msg_sndret= msgsnd(msg_sndfd,(void *)(&t_message_send),strlen("hello \n")+4,0);
t_message_send.a ++;
t_message_send.buff ="hello \n";
if(msg_sndret==0)
{
send_count++;
printf("msgsnd is suncessful,count is %d \n",send_count);
}
else
{
printf("msgsnd is fail,err val is %d \n",msg_sndret);
}
sleep(2);
}
}
int msg_rcvfd=0;
int rcv_ret=0;
int rcv_count=0;
struct message_lxl t_message_rcv;
static void pthread_rcvTask()
{
sleep(5); // 防止早于send函数就读
msg_rcvfd = msgget(1000,0666|IPC_CREAT);
if(msg_rcvfd<0)
{
printf("create 1000 msg fail\n");
}
while(1)
{
rcv_ret= msgrcv(msg_rcvfd,&t_message_rcv,100,0,0);
if(rcv_ret>0)
{
rcv_count++;
printf("receive %d msg,val is %d ,rcv_buff is %s\n",rcv_count,t_message_rcv.a,t_message_rcv.buff);
}
else if(rcv_ret <0 ){
printf("msgrcv fail \n,err is %d",rcv_ret);
}
}
}
void main()
{
pthread_ret=pthread_create(&pthread_send, NULL, (void *)pthread_sendTask, 0);
if(pthread_ret!=0)
{
printf("pthread_send Create error!\n");
}
pthread_ret=pthread_create(&pthread_rcv, NULL, (void *)pthread_rcvTask, 0);
if(pthread_ret!=0)
{
printf("pthread_send Create error!\n");
}
pthread_join(pthread_send, NULL);
pthread_join(pthread_rcv, NULL);
}
进程间或者线程间通过消息队列通讯
最新推荐文章于 2024-05-04 07:00:00 发布