消息队列的读写

来源:互联网 发布:矩阵扰动分析 编辑:程序博客网 时间:2024/06/05 13:27
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>


struct message
{
long int messagetype;
char text[BUFSIZ];
} messagebuf;




        int x;
int y;
long int msg_to_receive = 0;

void* ReadThreadFunc(void* arg);


void* WriteThreadFunc(void* arg);
int main (int argc,char* argv[])
{
    
int tid;
x=msgget((key_t)1234,0666 |IPC_CREAT);
y=msgget((key_t)1235,0666 |IPC_CREAT);
if(x==-1)
{
printf("fail!\n");
exit(1);
}
if(y==-1)
{
printf("fail!\n");
exit(1);
}
        if(pthread_create(&tid,NULL,WriteThreadFunc,NULL)!=0)
{
printf("Create Thread Error !\n");
exit(1);
}

        if(pthread_create(&tid,NULL,ReadThreadFunc,NULL)!=0)
{
printf("Create Thread Error !\n");
exit(1);
}
    while(1)
{}
return 0;
}
void* WriteThreadFunc(void* arg)
{
    while(1)
    {

      /*  printf("my message:");*/
fgets(messagebuf.text,BUFSIZ,stdin);
messagebuf.messagetype=1;
if(msgsnd(x,(void *)&messagebuf, BUFSIZ, 0)==-1)
{
printf("fail!\n");
exit(1);
}
printf ("\n");
if(strncmp(messagebuf.text,"end",3)==0)
break;       
    }
   /* if(msgctl(y, IPC_RMID, 0)==-1)
{
printf("msgct(IPC_RMID)  failed!\n");
exit(1);
}*/
}
void* ReadThreadFunc(void* arg)
{
while(1)
{
 if(msgrcv(y,(void *)&messagebuf, BUFSIZ,msg_to_receive, 0)==-1)
{
printf("fail!\n");
exit(1);
}
          printf("friend:%s\n", messagebuf.text);
}
}
0 0
原创粉丝点击