msgrcv.c
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct{
long msg_type;
char buf[128];
}msgT;
#define MSGLEN (sizeof(msgT)-sizeof(long))
int main(int argc, char **argv)
{
int msgid;
key_t key;
msgT msg;
int ret;
key=ftok(".",100);
if(key<0)
{
perror("ftok");
return 0;
}
msgid =msgget(key,IPC_CREAT|0666);
if (msgid < 0)
{
perror("msgget");
return 0;
}
while(1)
{
ret=msgrcv(msgid,&msg,MSGLEN,0,0);
if(ret < 0)
{
perror("msgrcv");
return 0;
}
printf("recive msg type=%ld,buf=%s\n",msg.msg_type,msg.buf);
}
}
msgsend.c
#include <stdio.h>
#include<sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct {
long msg_type;
char buf[128];
}msgT;
#define MSGLEN (sizeof(msgT)-sizeof(long))
int main(int argc, char **argv)
{
int ret;
key_t key;
int msgid;
msgT msg;
key=ftok(".",100);//.代表当前目录 id=100
if(key<0)
{
perror("ftok");
return 0;
}
msgid=msgget(key,IPC_CREAT|0666);
if (msgid<0)
{
perror("msgget");
return 0;
}
msg.msg_type=1;
strcpy(msg.buf,"this msg type 1");
ret=msgsnd(msgid,&msg,MSGLEN,0);
if(ret<0)
{
perror("msgsnd");
return 0;
}
}
消息发完后 ipcs可以查看 发送128字节 为buf的长度