今天完成消息队列的使用。

消息队列类似FIFO,但是可以实现随机查询。

主要函数:msgget,msgsnd,msgrcv,msgctl

实验实现两个进程之间的通信。

一个发送,一个接受。并不需要额外实现进程同步。

源代码来自华清远见:

发送:

#include

#include

#include

#include

#include

#include

#include

#define BUFFER_SIZE 512

struct message

{

long msg_type;

char msg_text[BUFFER_SIZE];

};

int main()

{

int qid;

key_t key;

struct message msg;

//ftok根据不同路径和关键字产生标准的KEY

if((key = ftok(“.”, ‘a’)) == -1)

{

perror(“ftok”);

exit(1);

}

if((qid = msgget(key, IPC_CREAT|0666)) == -1)//创建

{

perror(“msgget”);

exit(1);

}

printf(“open queue %dn”, qid);

while(1)

{

printf(“enter some message to the queue:”);

if((fgets(msg.msg_text, BUFFER_SIZE, stdin)) == NULL)

{

puts(“no message”);

exit(1);

}

msg.msg_type = getpid();//消息类型为进程号

if((msgsnd(qid, &msg, strlen(msg.msg_text), 0)) < 0)//发送消息

{

perror(“message posted”);

exit(1);

}

if(strncmp(msg.msg_text, “quit”, 4) == 0)

{

break;

}

}

exit(0);

}

接收:

#include

#include

#include

#include

#include

#include

#include

#define BUFFER_SIZE 512

struct message

{

long msg_type;

char msg_text[BUFFER_SIZE];

};

int main()

{

int qid;

key_t key;

struct message msg;

if((key = ftok(“.”, ‘a’)) == -1)

{

perror(“ftok”);

exit(1);

}

if((qid = msgget(key, IPC_CREAT|0666)) == -1)//创建

{

perror(“msgget”);

exit(1);

}

printf(“open queue %dn”, qid);

do

{

memset(msg.msg_text, 0, BUFFER_SIZE);

if(msgrcv(qid, (void*)&msg, BUFFER_SIZE, 0, 0) < 0)//接收消息

{

perror(“msgrcv”);

exit(1);

}

printf(“the message from process %d : %s”, msg.msg_type, msg.msg_text);

}while(strncmp(msg.msg_text, “quit”, 4));

if((msgctl(qid, IPC_RMID, NULL)) < 0)//从

{

perror(“msgctl”);

exit(1);

}

exit(0);

}

打开两个终端,1号发送,2号接收

—-想了解更多的linux相关异常处理怎么解决关注

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/linuxxt/61445.html

linux扩充消息队列,Linux关于消息队列的使用分享相关推荐

  1. linux扩充文件夹容量,Linux扩充磁盘空间 【附查看磁盘命令】

    今天手里一台raksmart要重做一下系统,但是做完以后发现磁盘空间只有2G-顿时感觉整个人不好了.于是乎练习客服处理,RAKSmart机器速度虽然一般,但是客服回复是真快,只需要一段命令就可以完美解 ...

  2. linux.调整收发队列,linux消息队列通信

    程序目的:学习linux消息队列通信 所用主要函数:msgget(),msgsnd(),msgrcv(),msgctl() 首先介绍每个函数的用法: (1)msgget 使用格式: #include ...

  3. Linux系统编程(七)消息队列

    Linux系统编程(七)消息队列 一.什么是消息队列 二.消息队列内部原理 三.实现消息队列的收发 1.发送消息队列 2.接收消息队列 四.消息队列与命名管道的比较 一.什么是消息队列 消息队列提供了 ...

  4. msgget();msgsnd();msgrcv();msgctl(); 消息队列 Linux进程间的通信方式之消息队列

    Linux进程间的通信方式 ----消息队列. 消息队列和共享内存类似 消息队列它允许一个或多个进程向它写消息,一个或多个进程向它写读消息. 消息队列存在于系统内核中,消息的数量受系统限制. 我们来看 ...

  5. Linux进程通信之System V消息队列

    System V消息队列是Open Group定义的XSI,不属于POSIX标准.System V IPC的历史相对很早,在上个世70年代后期有贝尔实验室的分支机构开发,80年代加入System V的 ...

  6. 【Linux系统编程】进程间通信之消息队列

    00. 目录 文章目录 00. 目录 01. 消息队列概述 02. 消息队列相关函数 03. 消息队列读写操作 04. 测试代码 05. 附录 01. 消息队列概述 消息队列提供了一种在两个不相关的进 ...

  7. Linux IPC实践(6) --System V消息队列(3)

    消息队列综合案例 消息队列实现回射客户/服务器 server进程接收时, 指定msgtyp为0, 从队首不断接收消息 server进程发送时, 将mtype指定为接收到的client进程的pid cl ...

  8. linux 声明消息函数,linux消息队列函数--解析

    #include www.2cto.com --------------------------------------------------------------------- 1.系统建立IP ...

  9. linux 线程同步消息队列,Linux 多线程同步之消息队列

    消息队列是消息的链表,存放在内核中并有消息队列标示符标示. msgget用于创建一个新队列或打开一个现存的队列.msgsnd将新消息加入到消息队列中:每个消息包括一个long型的type:和消息缓存: ...

  10. Linux IPC实践(5) --System V消息队列(2)

    消息发送/接收API msgsnd函数 int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg); 参数 msgid: 由ms ...

最新文章

  1. TensorFlow反向传播算法实现
  2. Linux服务器-使用mysql
  3. 【调试基础】Part 3 Window操作系统
  4. maven修改setting文件后重启_Maven项目构建
  5. java中 构造器与void
  6. Sqlmap爆库命令的简单使用
  7. 有字符csv文件导入matlab_Matlab:如何读取CSV文件以及如何读取带有字符串数据项的CSV文件...
  8. CentOS 最小化安装后安装桌面
  9. Html+Css打造一个精美的注册页面
  10. web开发时碰到的问题以及心得经验
  11. outlook发邮件的服务器,outlook中要求写接收、发送邮件的服务器,应该怎样写?...
  12. linux vi/vim 的命令
  13. java线程倒计时_Java核心知识点学习----多线程 倒计时记数器CountDownLatch和数据交换的Exchanger...
  14. Gson的基本介绍和使用
  15. 手把手教你几种生成词云的方式
  16. 关于Cat,同轴,光纤等以太网电缆的所有信息
  17. 计算机图形学 读书笔记(八) 光线跟踪加速Ray Tracing Acceleration
  18. 二、谈谈对数据库中索引的理解
  19. jquery循环创建div
  20. kindeditor 自定义上传图片

热门文章

  1. linux shell概述,Linux学习 -- Shell基础 -- 概述
  2. openocd调试Linux内核,Ubuntu下配置OpenOCD+FT2232
  3. 排序算法java源代码_排序算法汇总(java实现,附源代码)
  4. JAVA连接hbase伪分布失败_hbase伪分布安装配置
  5. 将tflearn的模型保存为pb,给TensorFlow使用
  6. 寒武纪芯片——有自己的SDK,支持tf、caffe、MXNet
  7. vue.js项目的mock数据配置
  8. uglify压缩angular控制器注意
  9. SQL Server2008(二)各版本的功能和主要应用范围
  10. jQuery Ajax详解