Linux发送与接收信息
receive:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 512
struct message
{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
if((key=ftok(".",'a'))==-1)
{
perror("ftok");
exit(1);
}
if((qid=msgget(key,IPC_CREAT|0666))==-1)
{
perror("msgget");
exit(1);
}
printf("Open queue %d",qid);
do
{
memset(msg.msg_text,0,BUFFER_SIZE);
if(msgrcv(qid,(void*)&msg,BUFFER_SIZE,0,0)<0)
{
perror("msgrcv");
exit(1);
}
printf("The message from process %d : %s",(int)msg.msg_type,msg.msg_text);
}while(strncmp(msg.msg_text,"quit",4));
if((msgctl(qid,IPC_RMID,NULL))<0)
{
perror("msgctl");
exit(1);
}
exit(0);
}
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 512
struct message
{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
if((key=ftok(".",'a'))==-1)
{
perror("ftok");
exit(1);
}
if((qid=msgget(key,IPC_CREAT|0666))==-1)
{
perror("msgget");
exit(1);
}
printf("Open queue %d",qid);
do
{
memset(msg.msg_text,0,BUFFER_SIZE);
if(msgrcv(qid,(void*)&msg,BUFFER_SIZE,0,0)<0)
{
perror("msgrcv");
exit(1);
}
printf("The message from process %d : %s",(int)msg.msg_type,msg.msg_text);
}while(strncmp(msg.msg_text,"quit",4));
if((msgctl(qid,IPC_RMID,NULL))<0)
{
perror("msgctl");
exit(1);
}
exit(0);
}
send:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 512
struct message{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
if((key=ftok(".",'a'))==-1)
{
perror("ftok");
exit(1);
}
if((qid=msgget(key,IPC_CREAT|0666))==-1)
{
perror("msgget");
exit(1);
}
printf("Open queue %d\n",qid);
while(1)
{
printf("Enter some message to the queue:");
if((fgets(msg.msg_text,BUFFER_SIZE,stdin))==NULL)
{
puts("No message");
exit(1);
}
msg.msg_type=getpid();
if((msgsnd(qid,&msg,strlen(msg.msg_text),0))<0)
{
perror("message posted");
exit(1);
}
if(strncmp(msg.msg_text,"quit",4)==0)
{
break;
}
}
exit(0);
}
#include <sys/ipc.h>
#include <sys/msg.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#define BUFFER_SIZE 512
struct message{
long msg_type;
char msg_text[BUFFER_SIZE];
};
int main()
{
int qid;
key_t key;
struct message msg;
if((key=ftok(".",'a'))==-1)
{
perror("ftok");
exit(1);
}
if((qid=msgget(key,IPC_CREAT|0666))==-1)
{
perror("msgget");
exit(1);
}
printf("Open queue %d\n",qid);
while(1)
{
printf("Enter some message to the queue:");
if((fgets(msg.msg_text,BUFFER_SIZE,stdin))==NULL)
{
puts("No message");
exit(1);
}
msg.msg_type=getpid();
if((msgsnd(qid,&msg,strlen(msg.msg_text),0))<0)
{
perror("message posted");
exit(1);
}
if(strncmp(msg.msg_text,"quit",4)==0)
{
break;
}
}
exit(0);
}
gcc 两者
#运行接收
./msgcrv
#运行发送
./msgsnd
#open two console to see the effect