msgrcv函数
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,int msgflg);
--功能:是从一个消息队列接收消息
--参数:msqid:由msgget函数返回的消息队列标识码msgp:是一个指针,指针指向准备接收的消息msgsz:是msgp指向的消息长度,这个长度不含保存消息类型的那个long int长整型msgtype:它可以实现接收优先级的简单形式msgflg:控制着队列中没有相应类型的消息可供接收时将要发生的事
--成功返回实际放到接收缓冲区里的字符个数(不包含保存消息类型的那个long int 长整型),失败返回-1并且设置errno
--msgtype=0返回队列第一条信息
--msgtype>0返回队列第一条类型msgtype的消息
--msgtype<0返回队列第一条类型小于等于msgtype绝对值得消息,并且是满足条件的消息类型最小的消息
--msgflg=IPC_NOWAIT,队列没有可读消息不等待,直接返回RNOMSG错误,
--msgflg=0,队列有可读消息,直接读取,没有可读消息,继续等待,直到有消息过来再接收。
--msgflg=MSG_NOERROR,消息大小超过msgsz时被截断
--msgtype>0且msgflg=MSG_EXCEPT,接收类型等于msgtype的第一条信息。

//消息队列--msgrcv()函数
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>//接收消息的结构体
struct msgbuf
{long mtype; /* message type, must be > 0 */char mtext[1024]; /*这是占位符,由程序员自己决定发送消息的数组长度 */
};int main(int arg, char * args[])
{int ret = 0;if (arg < 2){printf("please print one params !\n");return -1;}int type=atoi(args[1]);int msqid = msgget(0x1234, 0666);if (msqid == -1){perror("msgget() err");return -1;}printf("访问消息队列成功!msqid=%d\n", msqid);//接收消息struct msgbuf buf2;memset(&buf2, 0, sizeof(buf2));ret = msgrcv(msqid, &buf2, 1024, type, 0);if (ret == -1){perror("msgrcv() err");return -1;}printf("mtext=%s\n", buf2.mtext);return 0;
}

转载于:https://www.cnblogs.com/zhanggaofeng/p/6201907.html

Linux 进程间通讯详解五相关推荐

  1. Linux 进程间通讯详解一

    进程间的通讯 两台主机间的进程通讯 --socket一台主机间的进程通讯 --管道(匿名管道,有名管道) --System V进程间通信(IPC)包括System V消息队列,System V信号量, ...

  2. Linux 进程间通讯(IPC)方式 ------- 共享内存

    Linux 进程间通讯(IPC)方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) ...

  3. Linux 进程间通讯方式 pipe()函数

    Linux 进程间通讯方式有以下几种: 1->管道(pipe)和有名管道(fifo). 2->消息队列 3->共享内存 4->信号量 5->信号(signal) 6-&g ...

  4. linux无名管道实验代码,Linux 进程间通讯之创建无名管道和读写无名管道

    Linux进程间通讯的方式: 1. 管道(pipe)和有名管道(FIFO). 2. 信号(signal) 3. 消息队列 4. 共享内存 5. 信号量 6. 套接字(socket) 管道通讯: 无名管 ...

  5. linux进程间通讯的几种方式的特点和优缺点,和适用场合。

    http://blog.csdn.net/kakaka2011/article/details/6636661 1. 管道( pipe ):管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有 ...

  6. linux命名管道进程间通信,Linux进程间通讯--命名管道

    IPC安全 前面总结了匿名管道,如今来看命名管道:因为匿名管道的一个限制就是:只能是有血缘关系的进程间才能够通讯,好比:有两个同祖先的子进程,父子进程等:为了突破这一个限制,想让没有任何关系的两个进程 ...

  7. [转] linux系统文件流、文件描述符与进程间关系详解

    http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux(unix)进程与文件的关系错综复杂,本教程试图详细的阐述这个问题. 包括:     ...

  8. Linux进程间通讯之消息队列

    首先有个大体的概念:http://www.xefan.com/archives/83703.html 头文件: #include <sys/ipc.h> #include <sys/ ...

  9. linux进程间通讯-信号

    文章目录 进程间通信功能 信号 信号的概念 产生信号的方式 信号的默认(缺省)处理方式 进程接收到信号后的处理方式 kill函数 alarm函数 raise函数 abort函数 pause函数 sig ...

最新文章

  1. 面试官:群聊消息的已读未读功能,你来设计一个?
  2. 程序员缺乏经验的 7 种表现!
  3. Java键盘字符乱码判断代码
  4. 极端情况下收缩 Go 进程的线程数
  5. 如何使用Cyberduck登录SAP Leonardo机器学习服务的AWS在线存储
  6. 转: vim 的编辑格式设置
  7. html服务器框架,一种类似http/html的分布式GUI程序设计框架
  8. CodeVS 3027 线段覆盖2(DP)
  9. projecteuler_problem11
  10. github上成员贡献量_Bifrost 长期贡献规则,获得 BNC 的 5 种方式
  11. [C#.Tips]也来谈谈接口欺诈
  12. PyTricks 翻译:Python 字典的 get() 方法和它的默认参数
  13. linux kernel source code analysis
  14. matlab的比较器模块,simulink中比较器
  15. eclipse java环境配置_Eclipse怎么配置运行环境?
  16. Blockchain -Corda框架研究一 sendfile-Attachments学习笔记
  17. 等额本息计算 java 代码
  18. 1.2软件测试的定义和分类
  19. 台式电脑怎么组装步骤_台式电脑怎么组装 U大侠分享组装台式机的具体步骤
  20. 推荐几个免费论文查重网站

热门文章

  1. layui.table.render设置自定义高度高度
  2. springboot学习笔记(四)
  3. DM8168学习--引导顺序
  4. 汇编语言LENGTHOF运算符:计算数组中元素的个数
  5. Android恶意软件偷取Uber凭证
  6. 从Tensorflow代码中理解LSTM网络
  7. ANDROID L日志系统——JAVAAPI与LIBLOG
  8. java8 注解增强_Java8新增的重复注解功能示例
  9. mysql查看系统运行日志文件_mysql自身运行日志文件详解
  10. class? clazz参数_Java如何获取方法参数具体名称?这是个好问题!