消息队列代码

消息队列代码

#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版权协议,转载请附上原文出处链接和本声明。