Linux消息队列应用
- #include"sys/types.h"
- #include "sys/msg.h"
- #include "unistd.h"
- #include"stdio.h"
- void msg_stat(int,struct msqid_ds);
- int main()
- {
- int gflags,sflags,rflags;
- key_t key;
- int msgid;
- int reval;
- struct msgbuf{
- int mtype;
- char mtext[1];
- }msg_sbuf;
- struct msgmbuf{
- int mtype;char mtext[10];
- }msg_rbuf;
- struct msqid_ds msg_ginfo,msg_sinfo;
- char* msgpath="/UNIX/msgqueue";
- key=ftok(msgpath,'a');
- gflags=IPC_CREAT|IPC_EXCL;
- msgid=msgget(key,gflags|00666);
- if(msgid==-1){
- printf("msg create error!\n");
- return;
- }
- /*创建一个消息队列后,输出消息队列默认属性*/
- msg_stat(msgid,msg_ginfo);
- sflags=IPC_NOWAIT;
- msg_sbuf.mtype=10;
- msg_sbuf.mtext[0]='a';
- reval=msgsnd(msgid,&msg_sbuf,sizeof(msg_sbuf.mtext),sflags);
- if (reval==-1)
- {
- printf("message send error!\n");
- }
- /*发送一个消息后,输出消息队列属性*/
- msg_stat(msgid,msg_ginfo);
- rflags=IPC_NOWAIT|MSG_NOERROR;
- reval=msgrcv(msgid,&msg_rbuf,4,10,rflags);
- if (reval==-1)
- {
- printf("Read msg error!\n");
- }
- else
- printf("Read from msg queue %d bytes\n",reval);
- /*从消息队列中读出消息后,输出消息队列属性*/
- msg_stat(msgid,msg_ginfo);
- msg_sinfo.msg_perm.uid=8;
- msg_sinfo.msg_perm.gid=8;
- msg_sinfo.msg_qbytes=16388;
- /************************************************************************/
- /* 此处验证超级用户可以更改消息队列的默认msg_qbytes */
- //注意这里设置的值大于最大默认值
- /************************************************************************/
- reval=msgctl(msgid,IPC_SET,&msg_sinfo);
- if(reval==-1){
- printf("msg set info error!\n");
- return;
- }
- msg_stat(msgid,msg_ginfo);
- /************************************************************************/
- /* 验证设置消息队列属性 */
- /************************************************************************/
- reval=msgctl(msgid,IPC_RMID,NULL);//删除消息队列
- if (reval==-1)
- {
- printf("unlink msg queue error!\n");
- return;
- }
- }
- void msg_stat(int msgid,struct msqid_ds msg_info)
- {
- int reval;
- sleep(1);
- reval=msgctl(msgid,IPC_STAT,&msg_info);
- if (reval==-1)
- {
- printf("get msg info error!\n");
- return;
- }
- printf("\n");
- printf("current number of bytes on queue is %ld \n",msg_info.msg_cbytes);
- printf("number of messages in the queue is %ld \n",msg_info.msg_qnum);
- printf("max number of bytes on queue id %ld \n",msg_info.msg_qbytes);
- /************************************************************************/
- /* 每个消息队列是容量(字节数)都有限制MSGMNB,值的大小因系统而异
- 在创建新的消息队列时,msg_qtytes的默认值就是MSHMNB
- /************************************************************************/
- printf("pid of last msgsnd is %ld\n",msg_info.msg_lspid);
- printf("pid of last msgrcv is %ld \n",msg_info.msg_lrpid);
- printf("last msgcnd time is %s \n",ctime(&(msg_info.msg_stime)));
- printf("last msgrcv time is %s \n",ctime(&(msg_info.msg_rtime)));
- printf("last change time is %s \n",ctime(&(msg_info.msg_ctime)));
- printf("msg uid is %ld \n",msg_info.msg_perm.uid);
- printf("msg gid is %ld \n",msg_info.msg_perm.gid);
- }
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702496
Linux消息队列应用的更多相关文章
- linux消息队列编程实例
转自:linux 消息队列实例 前言: 消息队列就是一个消息的链表.可以把消息看作一个记录,具有特定的格式以及特定的优先级.对消息队列有写权限的进程可以向其中按照一定的规则添加新消息:对消息队列有读权 ...
- LINUX消息队列实战之一
前言 能说能抄能论皆不算,能写能打才是真功夫. 唠叨 反正我也是一个孤独的程序猿,多说一些奇奇怪怪的唠叨也无妨,第一次写消息队列,书本的东西和实战很不同,根据实战总结的一些注意事项会和大家分享,也敲打 ...
- linux 消息队列的限制
消息队列的系统限制 作者:冯老师,华清远见嵌入式学院讲师. 消息队列是System V的IPC对象的一种,用于进程间通信,会受到系统的限制,本文主要描述了三个限制.第一:议个消息的最大长度:第二:消息 ...
- linux消息队列通信
IPC机制 进程间通信机制(Inter Process Communication,IPC),这些IPC机制的存在使UNIX在进程通信领域手段相当丰富,也使得程序员在开发一个由多个进程协作的任务组成的 ...
- linux消息队列操作
对消息队列的操作无非有以下三种类型: 1. 打开或创建消息队列消息队列的内核持续性要求每一个消息队列都在系统范围内相应唯一的键值,所以,要获得一个消息队列的描写叙述字,仅仅需提供该消息队列的键值就可以 ...
- linux消息队列的使用
消息队列 *消息队列是内核地址空间中的内部链表,通过内核在各个进程之间传递的内容.消息顺序发送到消息队列中,每个消息队列都有IPC标识符唯一地进行标识. msgbuf结构 struct msgbuf{ ...
- Linux消息队列
#include <stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ms ...
- Linux 消息队列编程
消息队列.信号量以及共享内存被称作 XSI IPC,它们均来自system V的IPC功能,因此具有许多共性. 键和标识符: 内核中的每一种IPC结构(比如信号量.消息队列.共享内存)都用一个非负整数 ...
- linux 消息队列
消息队列,这个可是鼎鼎大名,经常在某些地方看见大家那个膜拜,那个,嗯,那个... 那就给个完整的例子,大家欣赏就行,我一直认为不用那个,嗯@ 这个队列的最大作用就是进程间通信,你要非搞个持久化,那也行 ...
随机推荐
- android开发之生命周期
android开发之生命周期 一:Activity的生命周期: 这几天了了解了安卓Activity的生命周期,对于生命周期有了大概的理解: 一个Activity的生命周期也就是Activity从生成到 ...
- BZOJ 1113: [Poi2008]海报PLA
1113: [Poi2008]海报PLA Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1025 Solved: 679[Submit][Statu ...
- 【poj2455】 Secret Milking Machine
http://poj.org/problem?id=2455 (题目链接) 题意 给出一张n个点,p条边的无向图,需要从1号节点走到n号节点一共T次,每条边只能经过1次,问T次经过的最大的边最小是多少 ...
- Jenkins用HTTP Request Plugin插件进行网站的监控(运维监控)
使用的插件: [HTTP Request Plugin] 思路: 说明:只能是网站是否正常打开,而不能是这个网站业务是否正常,如果是后者,则需要写特定的接口进行请求处理. 1.通过插件,发送GET请求 ...
- bash的变量设置
1. myname=zhangsan //设置变量 2. echo $myname //显示变量 或者:echo ${myname} 3. myname="my name is $mynam ...
- Scala类基础
最近在开始学习Scala,本篇文章我们来讲解一下Scala中类的使用 class Counter { var defaultValue = 0 val valValue = 0 private var ...
- hihocoder #1327
传送门 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个只包含小写字母'a'-'z'的字符串 S ,你需要将 S 中的字符重新排序,使得任意两个相同的字符不连在一 ...
- 捉襟见肘之自定义自拍相机AVFoundation
因为上篇的问题的,我搜索到解决方法: http://stackoverflow.com/questions/5427656/ios-uiimagepickercontroller-result-ima ...
- 如何让vim编辑器永久显示行号
在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...
- python 培训之 Python 数据类型
0. 变量 计算机某块内存的标签,存储数据的容器的标签,可被覆盖. a = "" a = "a1bcd" a=a+"ddd&quo ...