美文网首页
[Linux进程间通信]消息队列

[Linux进程间通信]消息队列

作者: longtzw | 来源:发表于2013-09-21 16:48 被阅读0次

消息队列是消息的链接表,存放在内核中并由消息队列标识符标识
每条消息由3部分组成:消息类型+消息长度+实际数据
每条新消息总是放在队列尾部

用于描述消息队列的结构体为struct msqid_ds

打开一个现存队列或创建一个新队列

int msgget(key_t key, int flag)
成功返回消息队列ID,出错返回-1

操作消息队列

int msgctl(int msqid, int cmd, struct msgid_ds *buf)
成功返回0,出错返回-1
  • 参数cmd说明对由msqid指定的队列要执行的命令,命令类型如下:
    • IPC_STAT 取此队列的msqid_ds结构,存放至buf
    • IPC_SET 根据buf中的值,设置此队列的msqid_ds
    • IPC_RMID 从系统中删除此消息队列以及仍在队列中的数据

将数据放到消息队列中

int msgsnd(int msqid, const void *ptr, 
       size_t nbytes, int flag)
成功返回0,出错返回-1
  • 参数ptr指向有消息类型和实际数据组成的结构体
  • 参数nbytes代表消息长度
  • 参数flag可以指定为IPC_NOWAIT,这使得当消息队列满或队列中的数
    据总量超过系统限制时msgsnd立即出错返回EAGAIN,若未指定则会
    阻塞

从消息队列中取消息

ssize_t msgrcv(int msqid, void *ptr, size_t nbytes, 
           long type, int flag)
成功返回消息的数据部分的长度,出错返回-1
  • 参数ptr指向存放取出消息的缓存区

  • 参数nbytes说明缓存区的大小,若返回消息大于nbytes,而且在flag中
    设置了MSG_NOERROR,则该消息会别截短且不通知我们消息被
    截短了,截去的部分会被丢弃

  • 参数type指名想要哪一种消息

    • type == 0 返回队列中的第一个消息
    • type > 0 返回队列中类型为type的第一个消息
    • type < 0 返回队列中消息类型值小于或等于type绝对值的消息
      如果这种消息有若干个,则返回消息类型值最小的
  • 参数flag值为IPC_NOWAIT,可以使操作不阻塞

相关文章

  • 零散的小知识记录(待补充和修改)

    Android跨进程通信:Binder,socket/管道/消息队列,共享内存; linux进程间通信:管道,Bi...

  • Linux进程基础行为(二)

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

  • linux 进程间通信手段介绍

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

  • 8.ipc

    进程间通信 Linux中的进程间通信主要有:管道、FIFO、消息队列、信号量、共享存储以及网络IPC中的套接字。 ...

  • Android Framework学习笔记之Binder

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

  • [Linux进程间通信]消息队列

    消息队列是消息的链接表,存放在内核中并由消息队列标识符标识每条消息由3部分组成:消息类型+消息长度+实际数据每条新...

  • Linux进程间通信——消息队列

    msggetmsgctlmsgsndmsgrcv 参考:https://blog.csdn.net/wei_che...

  • linux c/c++面试知识点整理(五)

    41、linux系统进程间有哪些通信方式 管道、有名管道、消息队列、信号、共享内存、socket、文件 ...

  • Linux

    操作系统 Linux进程间通信方式:Socket、共享内存、消息队列、信号量 epoll、select、poll ...

  • 高性能网站实用技巧之消息队列

    什么是消息队列? 消息队列(Message Queue)是一种进程间通信或同一进程的不同线程间的通信方式。进程或者...

网友评论

      本文标题:[Linux进程间通信]消息队列

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