`
deepfuture
  • 浏览: 4334077 次
  • 性别: Icon_minigender_1
  • 来自: 湛江
博客专栏
073ec2a9-85b7-3ebf-a3bb-c6361e6c6f64
SQLite源码剖析
浏览量:79431
1591c4b8-62f1-3d3e-9551-25c77465da96
WIN32汇编语言学习应用...
浏览量:68393
F5390db6-59dd-338f-ba18-4e93943ff06a
神奇的perl
浏览量:101518
Dac44363-8a80-3836-99aa-f7b7780fa6e2
lucene等搜索引擎解析...
浏览量:281242
Ec49a563-4109-3c69-9c83-8f6d068ba113
深入lucene3.5源码...
浏览量:14613
9b99bfc2-19c2-3346-9100-7f8879c731ce
VB.NET并行与分布式编...
浏览量:65595
B1db2af3-06b3-35bb-ac08-59ff2d1324b4
silverlight 5...
浏览量:31323
4a56b548-ab3d-35af-a984-e0781d142c23
算法下午茶系列
浏览量:45219
社区版块
存档分类
最新评论

linux-公共消息队列

阅读更多

#define _GNU_SOURCE
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#define QUE_ID 2

//使用公共消息队列,读写进程可以不同时运行。
int main(void){
    int queue_id;
    struct msgbuf *msg;
    int rc;
    
    //建立消息队列
    queue_id=msgget(QUE_ID,IPC_CREAT|0600);//QUE_ID为一个正整数,公共消息队列的ID
    if (queue_id==-1){
       perror("create queue error!\n");
       exit(1);
    }
    printf("message %d queue created!\n",queue_id);
    //创建发送消息结构
    printf("message send....\n");
    msg=(struct msgbuf*)malloc(sizeof(struct msgbuf)+100);//100为消息的长度,msgbuf结构只有2个成员一个成员是mytpe,另一个成员是一个字节的mtext,在结构后分配更多的空间以存放消息字符串
    msg->mtype=1;//消息类型,正整数
    strcpy(msg->mtext,"deepfuture.iteye.com");
    //发送消息
    rc=msgsnd(queue_id,msg,100,0);
    //最后一个参数可以是是0与随后这些值(或者就是0):IPC_NOWAIT,如果消息类型没有则立即返回,函数调用失败
    //MSG_EXCEPT,当消息类型大于0时,读与消息类型不同的第一条消息
    //MSG_NOERROR,如果消息长度大于100字节则被截掉
    if (rc==-1){
       perror("msgsnd error\n");
       exit(1);
    }
    free(msg);//发送完毕,释放内存
    printf("message sended!\n");
    
   
    return 0;
}

 以上是发送消息,以下是接收消息

#define _GNU_SOURCE
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
#define QUE_ID 2

//使用公共消息队列,读写进程可以不同时运行。
int main(void){
    int queue_id;
    struct msgbuf *msg;
    int rc;
    
    //取得消息队列
    queue_id=msgget(QUE_ID,0);//QUE_ID为一个正整数,公共消息队列的ID,


    if (queue_id==-1){
       perror("get queue error!\n");
       exit(1);
    }

    printf("message recv....\n");
    msg=(struct msgbuf*)malloc(sizeof(struct msgbuf)+100);
    rc=msgrcv(queue_id,msg,101,0,0);
    if (rc==-1){
       perror("recv error\n");
       exit(1);
    }
    printf("recv:%s\n",msg->mtext);   
   
    return 0;
}
 

效果

deepfuture@deepfuture-laptop:~/private/mytest$ ./testmessnd

message 0 queue created!

message send....

message sended!

deepfuture@deepfuture-laptop:~/private/mytest$ ./testmesrecv

message recv....

recv:deepfuture.iteye.com

deepfuture@deepfuture-laptop:~/private/mytest$ 


分享到:
评论

相关推荐

    基于Linux的消息队列及多线程编程实现的聊天室

    本程序主要是针对Linux IPC通信初学者对Linux下消息队列通信机制,多线程编程,字符串处理,链表操作等基本概念的练习。通过多个终端登录,不同终端上登录用户实现私聊,群聊,查看在线用户,简单注册(没有实现用户...

    linux网络编程-宋敬彬-part3

    4.3.4 消息队列的一个例子 114 4.3.5 信号量 116 4.3.6 共享内存 121 4.3.7 信号 124 4.4 Linux下的线程 127 4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的...

    linux网络编程-宋敬彬-part2

    4.3.4 消息队列的一个例子 114 4.3.5 信号量 116 4.3.6 共享内存 121 4.3.7 信号 124 4.4 Linux下的线程 127 4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的...

    DDMQ消息队列-其他

    DDMQ 是滴滴出行架构部基于 Apache RocketMQ 构建的消息队列产品。作为分布式消息中间件,DDMQ 为滴滴出行各个业务线提供了低延迟、高并发、高可用、高可靠的消息服务。DDMQ 提供了包括实时消息、延迟消息和事务消息...

    linux网络编程-宋敬彬-part1

    4.3.4 消息队列的一个例子 114 4.3.5 信号量 116 4.3.6 共享内存 121 4.3.7 信号 124 4.4 Linux下的线程 127 4.4.1 多线程编程实例 127 4.4.2 Linux下线程创建函数pthread_create() 129 4.4.3 线程的...

    gerrit-rabbitmq-plugin:业主的开发被冻结。 如果您想获得所有权或想继续在您的分叉公共存储库上进行开发,请与我联系

    这可以将gerrit事件发布到RabbitMQ提供的消息队列中。 发布的事件与 Gerrit 流事件网络相同。 这个插件适用于 Gerrit 2.8 - 2.10。 环境 linux java-1.7 gradle 建造 用 gradle 构建插件。 ./gradlew build ...

    Linux编程从入门到精通

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

    LINUX编程白皮书 (全集)

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

    sysv_mq:SysV消息队列的Go包装器

    去包装SysV消息队列 sysv_mq是的Go包装器。 使用该库之前,请务必阅读 , 和的这一点很重要。 sysv_mq是一个非常轻巧的包装器,不会对您隐藏任何错误。 可以在上查看公共API的文档。 sysv_mq已在Linux和OS X上进行了...

    linux编程白皮书

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

    LINUX系统管理白皮书

    内容简介回到顶部↑ 本书同时收录了Linux领域两位领导人物的作品—相当于“Linux 文档项目”的一个印刷版本,展示了Linux 核心概念及其基本结构。对于面向所有主流Linux子系统的支持与...附录C GNU通用公共许可证 257

    Linux管理员指南

    Linux发行版本与Windows NT的 技术异同 1 1.1 Linux操作系统和Linux发行版本 1 1.2 “自由”软件和GNU许可证 1 1.2.1 什么是GNU公共许可证 2 1.2.2 “自由”软件的优势 2 1.3 NT和Linux操作系统...

    LINUX编程白皮书

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

    Linux编程白皮书

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

    Linux编程资料

    4.3.2 消息队列 44 4.3.3 信号量 45 4.3.4 共享存储区 47 第5章 PCI 49 5.1 PCI的地址空间 49 5.2 PCI配置头 50 5.3 PCI的I/O和存储地址空间 51 5.4 PCI-ISA桥 51 5.5 PCI-PCI 桥 51 5.5.1 PCI-PCI桥:PCI I/O和存储...

Global site tag (gtag.js) - Google Analytics