//读
#include <sysat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf
{
long mtype;//消息标示
char mtext[100];//消息的正文
};
int main(int argc, const char *argv[])
{
//创建key值
key_t key=ftok("./",0);//为什么填0是应为这个是>
//但是给了三个可以填的其他都用不着,例如如果存>
if(-1==key)
{
printf("creat key failed");
return -1;
}
//创建消息队列
int msg_id=msgget(key,IPC_CREAT |0777);//后面的
if(-1==msg_id)
{
perror("creat msg failed");
return -1;
}
struct msgbuf buf;
printf("请输入对应的标识符");
scanf("%ld",& (buf.mtype));
while(1)
{
memset(buf.mtext,0,100);
ssize_t msgrcv_ret=msgrcv(msg_id,&buf,sizeof(buf),buf.mtype,0);
if(-1==msgrcv_ret)
{
printf("read msg failed");
return -1;
}
if(strcmp(buf.mtext,"kunkun\n")==0)
{
break;
}
printf("打印传过来的%s\n",buf.mtext);
}
return 0;
}
/写
#include <string.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>
struct msgbuf
{
long mtype;//消息标示
char mtext[100];//消息的正文
};
int main(int argc, const char *argv[])
{
//创建key值
key_t key=ftok("./",0);//为什么填0是应为这个是填int型
//但是给了三个可以填的其他都用不着,例如如果存在就报错
if(-1==key)
{
perror("创建失败");
return -1;
}
//创建消息队列
int msg_id=msgget(key,IPC_CREAT |0777);//后面的那个ip那一坨是创建队列,0777是权限
if(-1==msg_id)
{
perror("creat msg failed");
return -1;
}
struct msgbuf buf;
printf("获取标识符");
scanf("%ld",& (buf.mtype));
while(1)
{
memset( buf.mtext,0,100);
printf("请输入内容");
fgets(buf.mtext,100,stdin);
int msgsnd_ret=msgsnd(msg_id,&buf,strlen(buf.mtext)+1,0);
if(-1==msgsnd_ret)
{
printf("插入失败");
return -1;
}
if(strcmp(buf.mtext,"kunkun\n")==0)
{
break;
}
}
return 0;
}