博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
进程通信之消息队列
阅读量:4974 次
发布时间:2019-06-12

本文共 1951 字,大约阅读时间需要 6 分钟。

消息队列就是一些消息的列表。用户可以在消息队列中添加消息和读取消息等。消息存在于内核中,有“队列ID”来标识

 

msgget函数语法:

 

msgsnd函数语法:

msgrcv函数语法:

 

msgctl函数语法:

 

 添加消息代码:

/* msgsnd.c 添加消息*/#include 
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 512struct message{ long msg_type; char msg_text[BUFFER_SIZE];};int main(){ int qid; key_t key; struct message msg; /*根据不同的路径和关键字产生标准的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 %d\n",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);}

 

读取消息的程序代码:

/* msgrcv.c 读取消息*/#include 
#include
#include
#include
#include
#include
#include
#define BUFFER_SIZE 512struct message{ long msg_type; char msg_text[BUFFER_SIZE];};int main(){ int qid; key_t key; struct message msg; /*根据不同的路径和关键字产生标准的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 %d\n", 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); } return 0;}

 

转载于:https://www.cnblogs.com/yihujiu/p/5598113.html

你可能感兴趣的文章
《http权威指南》读书笔记5
查看>>
【python 3.6】如何将list存入txt后,再读出list
查看>>
VMware Workstation 显示内部错误
查看>>
form 表单跨域提交
查看>>
7月9号周五Civil 3D 2011 API免费网络培训预告
查看>>
bzoj2134 单选错位
查看>>
代理模式 (Proxy)
查看>>
Uvalive 7037 The Problem Needs 3D Arrays(最大密度子图)
查看>>
java解答:有17个人围成一圈(编号0~16),从第0号的人开始从1报数,凡报到3的倍数的人离开圈子,然后再数下去,直到最后只剩下一个人为止,问此人原来的位置是多少号?...
查看>>
Java多线程
查看>>
10亿美元融资腾讯跟头,Grail要用基因测序做癌症早期筛查
查看>>
Python GIL(Global Interpreter Lock)
查看>>
matlab 卷积公式与矩阵实现
查看>>
检测java string变量是否含有中文
查看>>
JS事件委托
查看>>
Centos7 配置
查看>>
javascript实现减速运动
查看>>
【2019.7.15 NOIP模拟赛 T2】与非树(nand)(树形DP)
查看>>
javascript 提取表单元素生成用于提交的对象(序列化 html 表单)
查看>>
学习Javascript闭包
查看>>