发送接收端1 头文件查man手册
#include <myhead.h>
struct msbuf{
long mtype;
char mtext[128];
};
int main(int argc, const char *argv[])
{
key_t key = ftok("/home/ubuntu/",2);
if(key < 0){
perror("ftok");
return -1;
}
printf("键值创建成功 %d\n",__LINE__);
int msqid = msgget(key,IPC_CREAT|0777);
if(msqid < 0){
perror("msgget");
return -1;
}
printf("消息队列创建成功 %d\n",__LINE__);
struct msbuf send;
while(1){
printf("输入消息类型>>> ");
scanf("%ld",&send.mtype);
getchar();
if(send.mtype <= 0){
break;
}
printf("输入消息内容>>> ");
fgets(send.mtext,sizeof(send.mtext),stdin);
send.mtext[strlen(send.mtext)-1] = '\0';
//数据打包发送
if(msgsnd(msqid,(void*)&send,sizeof(send.mtext),0) < 0){
perror("msgsnd");
return -1;
}
printf("发送数据成功 %d\n",__LINE__);
system("ipc -q");
}
return 0;
}
发送接收端2:
#include <myhead.h>
#define MSG_EXCEPT 020000
struct msbuf{
long mtype;
char mtext[128];
};
int main(int argc, const char *argv[])
{
key_t key = ftok("/home/ubuntu/",2);
if(key < 0){
perror("ftok");
return -1;
}
printf("键值创建成功 __%d__\n",__LINE__);
int msqid = msgget(key,IPC_CREAT|0777);
if(msqid < 0){
perror("msgget");
return -1;
}
printf("消息队列创建成功 __%d__\n",__LINE__);
system("ipc -q");
ssize_t res = 0;
struct msbuf rcv;
struct msbuf send;
while(1){
//读
res = msgrcv(msqid,&rcv,sizeof(rcv.mtext),0,0);
if(res < 0){
perror("msgrcv");
break;
}
printf("B读取到A>>> mtype=%ld : mtext=%s\n",rcv.mtype,rcv.mtext);
printf("向A发送数据类型>>> ");
scanf("%ld",&send.mtype);
getchar();
if(send.mtype <= 0){
break;
}
printf("向A发送数据>>> ");
fgets(send.mtext,sizeof(send.mtext),stdin);
send.mtext[strlen(send.mtext)-1] = '\0';
if(msgsnd(msqid,(void*)&send,sizeof(send.mtext),0) < 0){
perror("msgsnd");
return -1;
}
printf("向A发送数据成功 __%d__",__LINE__);
if(strcmp(send.mtext,"quit") == 0){
system("killall -9 ./w ./r");
}
}
/* if(msgctl(msqid,IPC_RMID,NULL) < 0){
perror("msgctl");
return -1;
}
printf("删除消息队列成功\n");*/
return 0;
}