#include <allhead.h>
//创建消息队列的结构体
typedef struct{
long type;
char text[256];
}msg_t;
key_t key;
msg_t buf;
int id;
int len = 0;
void* task2(void* arg)
{
while(1)
{
memset(&buf,0,sizeof(buf));
buf.type = 2;
printf("USR1:");
fgets(buf.text,sizeof(buf.text),stdin);
buf.text[strlen(buf.text)-1]='\0';
msgsnd(id,&buf,256,0);
}
}
void* task1(void* arg)
{
while(1)
{
memset(&buf,0,sizeof(buf));
len = msgrcv(id,&buf,256,1,0);
printf("\033[7DUSR2:%s\n",buf.text);
printf("USR1:");
fflush(stdout);
}
}
int main(int argc, const char *argv[])
{
//① 根据文件名创建秘钥
key = ftok("./",1);
if(key == -1)
{
perror("ftok");
return 1;
}
//② 根据同样的秘钥,访问相同的消息队列,不存在则创建
id = msgget(key,IPC_CREAT | 0666);
//③ 向消息队列发送消息
pthread_t id1;
pthread_t id2;
pthread_create(&id1,NULL,task1,NULL);
pthread_create(&id2,NULL,task2,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
return 0;
}
#include <allhead.h>
//创建消息队列的结构体
typedef struct{
long type;
char text[256];
}msg_t;
key_t key;
msg_t buf;
int id;
int len = 0;
void* task2(void* arg)
{
while(1)
{
memset(&buf,0,sizeof(buf));
buf.type = 1;
printf("USR2:");
fgets(buf.text,sizeof(buf.text),stdin);
buf.text[strlen(buf.text)-1]='\0';
msgsnd(id,&buf,256,0);
}
}
void* task1(void* arg)
{
while(1)
{
memset(&buf,0,sizeof(buf));
len = msgrcv(id,&buf,256,2,0);
printf("\033[7DUSR1:%s\n",buf.text);
printf("USR2:");
fflush(stdout);
}
}
int main(int argc, const char *argv[])
{
//① 根据文件名创建秘钥
key = ftok("./",1);
if(key == -1)
{
perror("ftok");
return 1;
}
//② 根据同样的秘钥,访问相同的消息队列,不存在则创建
id = msgget(key,IPC_CREAT | 0666);
//③ 向消息队列发送消息
pthread_t id1;
pthread_t id2;
pthread_create(&id1,NULL,task1,NULL);
pthread_create(&id2,NULL,task2,NULL);
pthread_join(id1,NULL);
pthread_join(id2,NULL);
return 0;
}
消息队列