//send.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
#include<string.h>
typedef struct{
long type;
char name[20];
int age;
}Msg;
int main(int argc,char*argv[])
{
key_t key=ftok("/home/zdg",'6');
printf("key:%x\n",key);
int msgid=msgget(key,IPC_CREAT|O_WRONLY|0777);
if(msgid<0)
{
perror("msgget error\n");
exit(-1);
}
Msg m;
while(1)
{
puts("please input your type:");
scanf("%ld",&m.type);
puts("please input you name:");
//scanf("%s",m.name);
while(getchar()=='\n');
if(fgets(m.name,sizeof(m.name),stdin)!=0)
{
int len=strlen(m.name);
m.name[len-1]='\0';
}
puts("please input you age:");
scanf("%d",&m.age);
int ret_val=msgsnd(msgid,&m,sizeof(m)-sizeof(m.type),0);
if(ret_val<0)
{
perror("msgsnd");
break;
}
}
return 0;
}
//recv.c
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <stdlib.h>
typedef struct
{
long type;
char name[20];
int age;
}Msg;
int main(int argc,char*argv[])
{
key_t key=ftok("/home/zdg",'6');
printf("key:%x\n",key);
int msgid=msgget(key,O_RDONLY);
if(msgid<0)
{
perror("msgget");
return -1;
}
Msg rcv;
long type;
while(1)
{
printf("please input type you want!");
scanf("%ld",&type);
int ret_val=msgrcv(msgid,&rcv,sizeof(rcv)-sizeof(type),type,0);
if(ret_val<0)
{
perror("msgrcv");
break;
}
printf("rcv-name:%s age:%d\n",rcv.name,rcv.age);
}
msgctl(msgid,IPC_RMID,NULL);
return 0;
}
#Makefile
all: recv send
recv:recv.o
gcc -o recv recv.c
send:send.o
gcc -o send send.c
clean:
rm recv send *.o
运行结果:
send
zdg@ubuntu:/mnt/hgfs/SHARE/Project/messagequen$ ./send
key:3601295a
please input your type:
123
please input you name:
zhang donggan
please input you age:
25
recv
zdg@ubuntu:/mnt/hgfs/SHARE/Project/messagequen$ ./recv
key:3601295a
please input type you want!123
rcv-name:zhang dong gang age:27
please input type you want!123
rcv-name:zhang donggang age:28
please input type you want!123
rcv-name:hang donggan age:25
please input type you want!