linux 消息队列

Posted ForMeDream

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux 消息队列相关的知识,希望对你有一定的参考价值。

/*
*删除 msgctl(msgid,IPC_RMID,0); ipcrm -q id ipcs -q 查看
*创建 msgqueue 时指定 key 为 IPC_PRIVATE 读取时将不能获得key指定的队列,所以需要自己定key
*/

  



#include<sys/ipc.h> #include<sys/msg.h> #include<sys/types.h> #include<unistd.h> #include<stdlib.h> #include<memory.h> #include<string.h> char path[100]={0}; typedef struct{ long mtype; char buff[1024]; }MSG; key_t getKey(){ getcwd(path,sizeof(path)-1); return ftok(path,0); } int main(){ int msgid=msgget(getKey(),IPC_CREAT|0666); MSG msg; memset(&msg,0,sizeof(msg)); msg.mtype=1; char buff[100]="1234567890asdfghjklqwertyuiopzxcvbnm,./"; memcpy(msg.buff,buff,sizeof(buff)); msgsnd(msgid,&msg,sizeof(MSG)-8,0); }
#include<sys/ipc.h>
#include<sys/msg.h>
#include<sys/types.h>
#include<unistd.h>
#include<stdlib.h>
#include<memory.h>
#include<string.h>
char path[100]={0};

typedef struct{
    long mtype;
    char buff[1024];
}MSG;

key_t getKey(){
    getcwd(path,sizeof(path)-1);
    return ftok(path,0);
}


int main(){
    int msgid=msgget(getKey(),0666);
    printf("msg id is %d
",msgid);
    MSG     msg;
    memset(&msg,0,sizeof(msg));
    msgrcv(msgid,&msg,sizeof(msg)-8,1,IPC_NOWAIT);
    printf("rcv %s
",msg.buff);
}

 

以上是关于linux 消息队列的主要内容,如果未能解决你的问题,请参考以下文章

rabbitmq - 不会获取队列中的所有消息

消息传递队列linux的问题

linux下,采用消息队列实现进程通信 (待续)

linux C ,消息队列问题,急求

linux消息队列为啥不能删除

linux 消息队列