Linux学习——使用消息队列进行进程间通信

先浅浅写个低配版:

读:

#include 
#include 
#include 
#include 

typedef struct{
    long msg_type;
    char buf[128];
}msgT;    

#define MSGLEN  (sizeof(msgT)-sizeof(long))
int main(){
    
    int msgid;
    key_t key;
    msgT msg;
    int ret;
    key = ftok(".",100);
    if(key<0){
        perror("ftok");
        return 0;
    }    
    msgid = msgget(key,IPC_CREAT|0666);
    if(msgid<0){
        perror("msgget");
        return 0;
    }
    int count=0;
    while(1){
        ret = msgrcv(msgid,&msg,MSGLEN,0,0);
        if(ret<0){
            perror("msgrcv");
            return 0;
        } 
        count++;
        //if(count>3){
            //break;
        //}
        //printf("receiv msg type=%d,buf=%s\n",(int)msg.msg_type,msg.buf);
		printf(">%s\n",msg.buf);
    }

    ret = msgctl(msgid,IPC_RMID,NULL);
    if(ret<0){
        perror("msgctl");
        return 0;
    }    


}

写:

#include 
#include 
#include 
#include 

typedef struct{
    long msg_type;
    char buf[128];
}msgT; 

#define MSGLEN  (sizeof(msgT)-sizeof(long))

int main()
{

    key_t key;
    int msgid;
    int ret;
    msgT msg;
    key = ftok(".",100);
    if(key<0){
        perror("ftok");
        return 0;
    }
    msgid = msgget(key,IPC_CREAT|0666);
    if(msgid<0){
        perror("msgget");
        return 0;
    }

    msg.msg_type = 1;
	while(1){
		printf(">");
		scanf("%s",msg.buf);
    	//strcpy(msg.buf,"this msg type 1");
    	ret = msgsnd(msgid,&msg,MSGLEN,0);
    	if(ret<0){
        	perror("msgsnd");
        	return 0;
    	}  
	}

}

结果:

Linux学习——使用消息队列进行进程间通信_第1张图片

 

你可能感兴趣的:(linux,C语言,嵌入式,消息队列)