当前位置:  技术问答>linux和unix

怎么查询消息队列中每条消息的状态

    来源: 互联网  发布时间:2015-10-17

    本文导语:  用msgctl能将消息队列的基本信息取得,但我想取得队列中的每条消息的状态(如:msgtype,消息的长度等信息),怎么处理呢? | #include  #include  #include  #include  struct mymsgbuf  { long mtype; //...

用msgctl能将消息队列的基本信息取得,但我想取得队列中的每条消息的状态(如:msgtype,消息的长度等信息),怎么处理呢?

|
#include 
#include 
#include 
#include 

struct mymsgbuf 
{
long mtype; // Message type 
int request; // Work request number 
double salary; // Employee's salary 
}; 

/*打开或者创建一个消息队列*/
int open_queue( key_t keyval )
{
int qid;
if((qid = msgget( keyval, IPC_CREAT | 0660 )) == -1)
{
return(-1);
}
return(qid);
}

/*往消息队列发送一条消息*/
int send_message( int qid, struct mymsgbuf *qbuf )
{
int result, length;
/* The length is essentially the size of the structure minus sizeof(mtype) */
length = sizeof(struct mymsgbuf) - sizeof(long);
if((result = msgsnd( qid, qbuf, length, 0)) == -1)
{
return(-1);
}
return(result);
}

/*从消息队列中读消息,成功读取后,该消息会被删除*/
int read_message( int qid, long type, struct mymsgbuf *qbuf )
{
int result, length;
/* The length is essentially the size of the structure minus sizeof(mtype) */
length = sizeof(struct mymsgbuf) - sizeof(long);
if((result = msgrcv( qid, qbuf, length, type, 0)) == -1)
{
return(-1);
}
return(result);
}

/*修改队列存取模式*/
int change_queue_mode( int qid, char *mode )
{
struct msqid_ds tmpbuf;
/* Retrieve a current copy of the internal data structure */
msgctl( qid,IPC_STAT, &tmpbuf);
/* Change the permissions using an old trick */
sscanf(mode, "%ho", &tmpbuf.msg_perm.mode);
/* Update the internal data structure */
if( msgctl( qid, IPC_SET, &tmpbuf) == -1)
{
return(-1);
}
return(0);
}

/*删除消息队列*/
int remove_queue( int qid )
{
if( msgctl( qid, IPC_RMID, 0) == -1)
{
return(-1);
}
return(0);
}

main()
{
int qid;
key_t msgkey;

struct mymsgbuf msg;
/* Generate our IPC key value */
msgkey = ftok(".", 'm');

/* Open/create the queue */
if(( qid = open_queue( msgkey)) == -1) 
{
perror("open_queue");
exit(1);
}

/* Load up the message with arbitrary test data */
msg.mtype = 1; /* Message type must be a positive number! */
msg.request = 1; /* Data element #1 */
msg.salary = 1000.00; /* Data element #2 (my yearly salary!) */

/* Bombs away! */
if((send_message( qid, &msg )) == -1) 
{
perror("send_message");
exit(1);
}

if((read_message(qid, 0, &msg )) == -1)
{
perror("read_mesage");
exit(1);
}
printf("%ld  %d  %fn",msg.mtype, msg.request, msg.salary);
}

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Red Hat Linux9上如何查询和设置端口状态?
  • Oracle 10g各个帐号的访问权限、登录路径、监控状态命令查询等等
  • ORACLE 回收站当前状态查询整理
  • MongoDB 2.5新查询引擎简介
  • mysql查询语句通过limit来限制查询的行数
  • Mysql查询错误:ERROR:no query specified原因
  • red hat 4.6如何查询到底有几个swap分区?如何查询是否都激活了?
  • Mysql设置查询条件(where)查询字段为NULL
  • Oracle将查询的结果放入一张自定义表中并再查询数据
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • MySQL查询优化:用子查询代替非主键连接查询实例介绍
  • Mysql Select查询执行流程介绍及实例
  • having与子查询 查询各门课程超过80分的学生姓名
  • mysql的SQL_NO_CACHE(在查询时不使用缓存)和sql_cache用法
  • sql中count或sum为条件的查询示例(sql查询count)
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • mysqli多查询特性 实现多条sql语句查询
  • ubuntu系统中软件安装、卸载以及查询是否已经安装某个软件包的方法
  • Oracle查询表、视图、序列等信息查询
  • Mysql大表查询优化技巧总结及案例分析
  • SQL语言查询基础:连接查询 联合查询 代码
  • CSS3 @media 查询
  • MySQL查询优化:LIMIT 1避免全表扫描提高查询效率
  • MongoDB 查询分析
  • python实现DNS正向查询、反向查询的例子


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3