在這裏插入圖片描述
在這裏插入圖片描述
代碼:
1./q_read
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#define _SIZE_ 10000
//key_t ftok(const char *pathname, int proj_id);
/*創建一個消息隊列*/
/*int msgget(key_t key, int msgflg);
int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);
int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg);
int msgctl(int msqid, int cmd, struct msqid_ds *buf);*/
typedef struct _msg
{
long mtype; // 消息類型
char mtext[100]; // 消息正文
//…… …… // 消息的正文可以有多個成員
}MSG;
void send(){
/*創建隊列*/
key_t key=0;
int msgqid=0;
MSG msg;
memset(&msg,0,sizeof(msg));
/*ftok =路徑名字+項目ID*/
key = ftok("./",2015);//key
/*創建或者查找已經存在的,消息隊列,只要有相同的key
*就能夠得到同一個消息隊列
*IPC_CREAT:創建消息隊列
*IPC_EXCL:檢查隊列消息是否存在
*/
msgqid = msgget(key,IPC_CREAT|0666);
if(msgqid == -1){
perror("msgget");
exit(-1);
}
/*將信息添加到隊列裏面*/
msg.mtype = 10 ;//消息種類
printf("send information to lyx :\n");
gets(msg.mtext);//正文內容
/*發送信息
*msg_id:消息隊列標識符
*&msg:消息結構體地址
*sizeof(msd)-sizeof(long):消息正文大小
*0:習慣用0
*/
msgsnd(msgqid,&msg,sizeof(msg)-sizeof(long),0);
printf("\n");
/*
msgrcv(msgqid,&msg,sizeof(msg)-sizeof(long),(long)10,0);
printf("receive information from lyx:\n");
printf("msg.mtext=%s\n",msg.mtext);
//刪除消息對列
//IPC_RMID:刪除標誌位
msgctl(msgqid,IPC_RMID,NULL);*/
}
void receive(){
//while(1){
printf("receive information from lmj:\n");
/*創建隊列*/
key_t key=0;
int msgqid=0;
MSG msg;
/*將信息添加到隊列裏面*/
memset(&msg,0,sizeof(msg));
/*ftok =路徑名字+項目ID*/
key = ftok("./",2019);//key
/*創建或者查找已經存在的,消息隊列,只要有相同的key
*就能夠得到同一個消息隊列
*IPC_CREAT:創建消息隊列
*IPC_EXCL:檢查隊列消息是否存在
*/
msgqid = msgget(key,IPC_CREAT|0666);
if(msgqid == -1){
perror("msgget");
exit(-1);
}
/*取出10 的信息
*msg_id:消息隊列標識符
*&msg:消息結構體地址
*sizeof(msd)-sizeof(long):消息正文大小
*(long)10:消息的類型
*0:習慣用0
*/
msgrcv(msgqid,&msg,sizeof(msg)-sizeof(long),(long)3,0);
printf("msg.mtext=%s\n",msg.mtext);
msgctl(msgqid,IPC_RMID,NULL);
printf("\n");
//}
}
int main(){
while(1){
send();
receive();
}
return 0;
}
2./q_write
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdlib.h>
#define _SIZE_ 10000
//key_t ftok(const char *pathname, int proj_id);
/*創建一個消息隊列*/
/*int msgget(key_t key, int msgflg);
int msgrcv(int msqid, void *msg_ptr, size_t msg_sz, long int msgtype, int msgflg);
int msgsnd(int msqid, const void *msg_ptr, size_t msg_sz, int msgflg);
int msgctl(int msqid, int cmd, struct msqid_ds *buf);*/
typedef struct _msg
{
long mtype; // 消息類型
char mtext[100]; // 消息正文
//…… …… // 消息的正文可以有多個成員
}MSG;
void receive(){
//while(1){
printf("receive information from lmj:\n");
/*創建隊列*/
key_t key=0;
int msgqid=0;
MSG msg;
/*將信息添加到隊列裏面*/
memset(&msg,0,sizeof(msg));
/*ftok =路徑名字+項目ID*/
key = ftok("./",2015);//key
/*創建或者查找已經存在的,消息隊列,只要有相同的key
*就能夠得到同一個消息隊列
*IPC_CREAT:創建消息隊列
*IPC_EXCL:檢查隊列消息是否存在
*/
msgqid = msgget(key,IPC_CREAT|0666);
if(msgqid == -1){
perror("msgget");
exit(-1);
}
/*取出10 的信息
*msg_id:消息隊列標識符
*&msg:消息結構體地址
*sizeof(msd)-sizeof(long):消息正文大小
*(long)10:消息的類型
*0:習慣用0
*/
msgrcv(msgqid,&msg,sizeof(msg)-sizeof(long),(long)10,0);
printf("msg.mtext=%s\n",msg.mtext);
msgctl(msgqid,IPC_RMID,NULL);
printf("\n");
//}
}
void send(){
/*創建隊列*/
key_t key=0;
int msgqid=0;
MSG msg;
memset(&msg,0,sizeof(msg));
/*ftok =路徑名字+項目ID*/
key = ftok("./",2019);//key
/*創建或者查找已經存在的,消息隊列,只要有相同的key
*就能夠得到同一個消息隊列
*IPC_CREAT:創建消息隊列
*IPC_EXCL:檢查隊列消息是否存在
*/
msgqid = msgget(key,IPC_CREAT|0666);
if(msgqid == -1){
perror("msgget");
exit(-1);
}
/*將信息添加到隊列裏面*/
msg.mtype = 3 ;//消息種類
printf("send information to lyx :\n");
gets(msg.mtext);//正文內容
/*發送信息
*msg_id:消息隊列標識符
*&msg:消息結構體地址
*sizeof(msd)-sizeof(long):消息正文大小
*0:習慣用0
*/
msgsnd(msgqid,&msg,sizeof(msg)-sizeof(long),0);
printf("\n");
/*
msgrcv(msgqid,&msg,sizeof(msg)-sizeof(long),(long)10,0);
printf("receive information from lyx:\n");
printf("msg.mtext=%s\n",msg.mtext);
//刪除消息對列
//IPC_RMID:刪除標誌位
msgctl(msgqid,IPC_RMID,NULL);*/
}
int main(){
while(1){
receive();
send();
}
return 0;
}
//刪除消息對列
//IPC_RMID:刪除標誌位
/*memset(&msg,0,sizeof(msg));
gets(msg.mtext);
msg.mtype = 10 ;//消息種類
msgsnd(msgqid,&msg,sizeof(msg)-sizeof(long),0);*/