- #include"sys/types.h"
-
#include"sys/msg.h"
-
#include"unistd.h"
-
#include"stdio.h"
-
voidmsg_stat(int,structmsqid_ds);
-
intmain()
- {
-
intgflags,sflags,rflags;
- key_tkey;
-
intmsgid;
-
intreval;
-
structmsgbuf{
-
intmtype;
-
charmtext[1];
- }msg_sbuf;
-
structmsgmbuf{
-
intmtype;charmtext[10];
- }msg_rbuf;
-
structmsqid_dsmsg_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("msgcreateerror!\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("messagesenderror!\n");
- }
-
- msg_stat(msgid,msg_ginfo);
- rflags=IPC_NOWAIT|MSG_NOERROR;
- reval=msgrcv(msgid,&msg_rbuf,4,10,rflags);
-
if(reval==-1)
- {
-
printf("Readmsgerror!\n");
- }
-
else
-
printf("Readfrommsgqueue%dbytes\n",reval);
-
- msg_stat(msgid,msg_ginfo);
- msg_sinfo.msg_perm.uid=8;
- msg_sinfo.msg_perm.gid=8;
- msg_sinfo.msg_qbytes=16388;
-
-
-
-
- reval=msgctl(msgid,IPC_SET,&msg_sinfo);
-
if(reval==-1){
-
printf("msgsetinfoerror!\n");
-
return;
- }
- msg_stat(msgid,msg_ginfo);
-
-
-
-
reval=msgctl(msgid,IPC_RMID,NULL);
-
if(reval==-1)
- {
-
printf("unlinkmsgqueueerror!\n");
-
return;
- }
- }
-
voidmsg_stat(intmsgid,structmsqid_dsmsg_info)
- {
-
intreval;
- sleep(1);
- reval=msgctl(msgid,IPC_STAT,&msg_info);
-
if(reval==-1)
- {
-
printf("getmsginfoerror!\n");
-
return;
- }
-
printf("\n");
-
printf("currentnumberofbytesonqueueis%ld\n",msg_info.msg_cbytes);
-
printf("numberofmessagesinthequeueis%ld\n",msg_info.msg_qnum);
-
printf("maxnumberofbytesonqueueid%ld\n",msg_info.msg_qbytes);
-
-
-
printf("pidoflastmsgsndis%ld\n",msg_info.msg_lspid);
-
printf("pidoflastmsgrcvis%ld\n",msg_info.msg_lrpid);
-
printf("lastmsgcndtimeis%s\n",ctime(&(msg_info.msg_stime)));
-
printf("lastmsgrcvtimeis%s\n",ctime(&(msg_info.msg_rtime)));
-
printf("lastchangetimeis%s\n",ctime(&(msg_info.msg_ctime)));
-
printf("msguidis%ld\n",msg_info.msg_perm.uid);
-
printf("msggidis%ld\n",msg_info.msg_perm.gid);
- }
本文出自 “阿凡达” 博客,请务必保留此出处http://shamrock.blog.51cto.com/2079212/702496
分享到:
相关推荐
Linux消息队列分析及应用
Linux消息队列分析及应用.pdf
Linux消息队列分析及应用 (2).pdf
非常齐全的消息队列应用实例,每个工程都经过调试并且通过
消息队列在Linux线程或进程间通信中的应用.pdf
这是一个消息队列。里面应用了互斥锁,条件变量,延时处理,容错处理等
一个简单的消息队列,基于Linux sysv 队列实现。默认sysv队列的存储空间比较小,可以通过设置内核参数加大sysv队列的空间
这资源是在linux下用C语言开发的模拟ATM机开户、取款与款的源代码(这是服务器端代码,客户器比较简单,...主要应用了Linux多线程,Select监听,还有Linux与Window之间应用Socket与消息队列并行通行的交互基础框架...
包含:lc.c Makefile msg1 pe.c toff vmain.c 直接可在linux环境下编译执行
测试对象:要测试队列管理器和队列,请使用样本程序amqsput(将消息放入队列)和amqsget(从队列获取消息),步骤如下: (1)启动DOS窗口,进入到C:\Program Files\IBM\WebSphere MQ\bin目录下。 (2)将消息...
RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消息队列在分布式系统开发中应用非常广泛。 MQ 为Message Queue , 消息...
Linux采用消息队列的方式来实现消息传递。System V的消息队列(message queues)是进程之间互相发送消息的一种异步(asynchronously)方式,在这种情形之下,发送方不必等待接收方检查它的消息——即在发送完消息后...
将 linux 内核的 kfifo 移植到应用层, 实现一种易使用, 高效率的 fifo 队列
Linux 安装 RabbitMQ 应用 / RabbitMQ 延时队列
使用linux/windows的队列管理,有锁,事件的应用,经典编程。
这使得Linux成为了一种非常灵活的操作系统,适用于各种设备和应用场景。 可定制性:由于Linux的源代码是公开的,用户可以根据自己的需求进行定制和修改。这使得Linux成为了一种非常适合企业级应用的操作系统,可以...
应用函数msgget、msgrcv、msgsnd,读、写消息队列中的消息并打印输出。 (4)应用用消息队列实现简单的聊天程序。 (5)父进程创建两个子进程,父进程向子进程发送信号。 (6)通过共享内存交换数据。
无论何种线程,每个线程都有自己的消息队列 通过这些队列,实现加法计算请求的发送与转发,以及计算结果的返回 具体业务要求: 用户线程需同时向主控线程提出>=1000个加法计算请求 用户线程需要验证是否收到了这些...
最近在Hi3515上调试Qt与DVR程序,发现他们之间使用消息队列通信的,闲暇之余,就总结了一下消息队列,呵呵,自认为通俗易懂,同时,在应用中也发现了消息队列的强大之处。 关于线程的管理(互斥量和条件变量)见:...