消息队列代码
#include<stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include<strings.h>
#include<signal.h>
#define msg_fife "./msgfile"
#define msg_size 1024
// key_t ftok(const char *pathname, int proj_id);
struct msgbuf {
long mtype; /* message type, must be > 0 */
char mtext[msg_size]; /* message data */
};
void print_err(char *estr){
perror(estr);
exit(-1);
}
int msgque(void){
int msgid=-1;
int fd=-1;
key_t key=-1;
fd=open(msg_fife,O_RDWR|O_CREAT,0664);
if(fd==-1)print_err("open fail");
key=ftok(msg_fife,'a');
if(key==-1)print_err("key fail");
msgid=msgget(key,0664|IPC_CREAT);
if(msgid==-1)print_err("msgid fail");
return msgid;
}
int msgid=-1;
void signal_fun(int signo){
msgctl(msgid,IPC_RMID,NULL);
exit(-1);
}
int main(int argc,char **argv){
int ret=-1;
long recv_msgtype =0;
if(argc !=2){
printf("./a.out recv_msgtype");
}
recv_msgtype =atol(argv[1]);
msgid= msgque();
ret=fork();
//fa song xioa xi
if (ret>0){
signal(SIGINT,signal_fun);
struct msgbuf msg_buf={0};
while(1){
bzero(&msg_buf,sizeof(msg_buf));
//int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
//feng zhaung xiao xi bao
//read(0,msg_buf.mtext,sizeof(msg_buf.mtext));
scanf("%s",msg_buf.mtext);
printf("input msgtepy\n");
// read(0,msg_bufmtype,sizeof(msg_buf.mtype));
scanf("%ld",&msg_buf.mtype);
//fa song xiao xi
msgsnd(msgid,&msg_buf,msg_size,0);
}
}
//jie shou xiao xi
else if(ret==0){
struct msgbuf msg_buf={0};
int ret =0;
while(1){
// ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp , int msgflg);
bzero(&msg_buf,sizeof(msg_buf));
ret= msgrcv(msgid,&msg_buf,msg_size,recv_msgtype,0);
if(ret>0){
printf("xiao::%s\n",msg_buf.mtext);
}
}
}
return 0;
}

版权声明:本文为weixin_46539107原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。