#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/msg.h>
typedef struct msgbuf{
long type;
char text[256];
}msg_t;
void *task(void*arg){
key_t key=ftok("./ipc",1);
if(key==-1){
perror("ftok");
return NULL;
}
int id=msgget(key,IPC_CREAT | 0666);
msg_t buf;
int len =0;
while(1){
memset(&buf,0,sizeof(msg_t));
len=msgrcv(id,&buf,256,1,0);
printf("读取到的消息为:%s\n",buf.text);
}
}
int main(int argc,const char*argv[])
{
pthread_t fd;
pthread_create(&fd,NULL,task,NULL);
pthread_detach(fd);
//创建秘钥
key_t key =ftok("./ipc",1);
if(ftok(",/ipc",1)== -1){
perror("ftok");
return 1;
}
// 如果消息队列不存在则创建一个新的消息队列
int id=msgget(key,IPC_CREAT |0666);
msg_t buf;
int len=0;
while(1){
memset(&buf,0,sizeof(msg_t));
printf("请输入消息:");
scanf("%256s",buf.text);
while(getchar()!=10);
len=strlen(buf.text);
msgsnd(id,&buf,len,0);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <pthread.h>
#include <fcntl.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/ipc.h>
#include <sys/msg.h>
typedef struct shmbuf{
char text[256];
}msg_t;
void *task(void *arg){
key_t key=ftok("./ipc",1);
if(key==-1){
perror("ftok");
return NULL;
}int id= msgget(key,IPC_CREAT | 0666);
msg_t buf;
int len=0;
while(1){
memset(&buf,0,sizeof(msg_t));
printf("请输入消息");
scanf("%256s",buf.text);
while(getchar()!=10);
len=strlen(buf.text);
msgsnd(id,&buf,len,0);
}
}
int main(int argc,const char*argv[])
{
pthread_t fd;
pthread_create(&fd,NULL,task,NULL);
pthread_detach(fd);
key_t key =ftok(",/ipc",1);
if(key==-1){
perror("ftok");
return 1;
}
//如果不存在则创建一个新的队列
int id=msgget(key,IPC_CREAT | 0666);
msg_t buf;
int len =0;
while(1){
memset(&buf,0,sizeof(msg_t));
len=msgrcv(id,&buf,256,1,0);
printf("读取到的消息为:%s/n",buf.text);
}
return 0;
}