使用注意
https://www.cnblogs.com/52php/p/5862114.html
https://www.cnblogs.com/java20130726/archive/2013/05/06/3218496.html
https://www.cnblogs.com/thammer/p/5106560.html
确保发送接受的key值相同
ipcs ipcrm -q msqid
或者ipcrm -q key_t
查看及删除msqid
进程退出后,改进程创建的msqid所包含的信息仍然存在,注意在程序处理中删除。
发送
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX 1024
struct msg
{
long mtype;
char text[MAX];
};
int main(void)
{
key_t key;
int msg_id,n = 1;
struct msg buf;
key = ftok("./",'a');
msg_id = msgget(key,IPC_CREAT|0666);
printf("msg_id = %d\n",msg_id);
while(1)
{
fgets(buf.text,MAX,stdin);
buf.mtype = n;
msgsnd(msg_id,&buf,strlen(buf.text)+1,0);
}
return 0;
}
接受
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX 1024
struct msg
{
long mtype;
char text[MAX];
};
int main(void)
{
key_t key;
int msg_id;
struct msg buf;
key = ftok("./",'a');
msg_id = msgget(key,IPC_CREAT|0666);
printf("msg_id = %d\n",msg_id);
while(1)
{
msgrcv(msg_id,(struct msg*)&buf,MAX,1,0);
printf("%s",buf.text);
}
return 0;
}