美文网首页
Linux的消息队列

Linux的消息队列

作者: 小pb | 来源:发表于2019-11-02 19:22 被阅读0次

消息队列是两个进程之间传递二进制块数据的一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有选择的接收数据,不一定像管道和命名管道那样必须先进先出的方式接收。

Linux System V的消息队列的API定义在 <sys/msg.h>, 文件包括四个系统调用:msgget(),msgsnd(), msgrcv(), msgctl();

msgget系统调用

msgget系统调用创建一个消息队列,或者获取一个现有的消息队列。

#include <sys/msg.h>

int msgget(key_t key, int msgflg);

msgflg和semget的参数相同。
如果msgget()成功返一个正整数,它是消息队列的标识符。失败返回-1,并修改errno。

msgsnd系统调用

msgsnd把一条消息添加到消息队列中。

int msgsnd(int msqid, const void* msg_ptr, size_t msg_sz, int msgflg);

msg_ptr表示指向一个准备发送的消息,消息必须被定义为如下的类型。

struct msgbuf {
  long mtype;   // 消息类型
  char mtex[512];  // 消息数据
}

msgrcv 系统调用

msgrcv从消息队列中获取数据。

    int msgrcv(int msqid, void* msg_ptr,
               size_t msg_sz, long int msg_type, int msgflg)

msgctl 系统调用

msgctl用于控制消息队列的某些属性。

    int msgctl(int msgid, int commond, struct msqid_ds* buf);

在操作系统system V IPC进程间通信方式都使用一个全局唯一的键值key 来描述一个共享资源,当程序调用semget, shmget 或者msgge,就创建这些共享资源的一个实例。
Linux 提供了ipcs命令,来观察当前系统上拥有哪些共享资源的实例。

ipcs.png

相关文章

  • Linux消息队列

    1、消息队列简介 消息队列本质上是位于内核空间的链表,链表的每个节点都是一条消息。每一条消息都有自己的消息类型,消...

  • Linux的消息队列

    消息队列是两个进程之间传递二进制块数据的一种简单有效的方式。每个数据块都有一个特定的类型,接收方可以根据类型来有选...

  • Android Binder进程间通信机制

    1、概述 Linux传统IPC机制主要有已下几种:管道、消息队列、共享内存Socket等。消息队列和管道采用存储-...

  • 深入浅出Binder进程间通信机制

    1、概述 Linux传统IPC机制主要有已下几种:管道、消息队列、共享内存Socket等。消息队列和管道采用存储-...

  • 自己实现消息队列msg queue linux C

    因为不仅仅信号量,共享内存、消息队列在NDK下都不能用,所以之前使用Linux 下IPC的消息队列,msgget/...

  • Linux进程基础行为(二)

    本节主要讲Linux进程间通信在Linux中,各个进程都共享内核空间,因此LInux进程通信中的管道,消息队列等都...

  • Linux 消息队列长度处理

    问题: 在Linux 系统中通过消息队列进行进程间的通讯时,只要定义的BufSize小于1024,队列就能正常读写...

  • Linux IPC之消息队列

    通过ipcs可以查看消息队列新增头文件消息队列中消息的新增和删除是对等的,内部维护一个链表,插入一个...

  • Android Framework学习笔记之Binder

    Linux进程间通信的方式:管道(Pipe)、信号(Signal)、消息队列(Message)、共享内存(Shar...

  • linux 进程间通信手段介绍

    linux进程间支持多种通信机制进行通信、传递消息。常用的包括:管道、共享内存、消息队列、socket。代码参考自...

网友评论

      本文标题:Linux的消息队列

      本文链接:https://www.haomeiwen.com/subject/dizqbctx.html