消息队列(1):windows10+eclipse+cygwin编写第一个消息队列程序

在windows10环境下安装了eclipse,cygwin,编写第一个简单的消息队列程序。

1.新建工程并配置编译器

在eclipse开发环境下新建一个C project,“Tool Chains”选择“cygwin GCC”
这里写图片描述
在工程右键点击属性,在“C/C++ build”下拉选项中“Tool Chain Editor”界面下的“current builder”下选择“CDT Internal Builder”。
如果Cygwin安装了make,则这里不选“CDT Internal Builder”也可以(默认为Gnu Make Builder)。
这里写图片描述

2.新建源文件并输入代码

新建一个c文件,输入源代码(附后)。

3.编译运行

运行结果,在控制台打印:
send pi is 3.141590.
msg size is 8192.
recv pi is 3.141590.
表示发送消息中的pi正确地赋给了接收消息结构体。
消息队列中各函数的用法后续再仔细摸。

附.源代码

#include <stdio.h>
#include <stdlib.h>
#include <mqueue.h>
#include <fcntl.h>

struct MsgType {
    int len;
    float pi;
};

int main() {

    mqd_t msgq_id;
    struct MsgType msg1;
    struct MsgType msg2;
    struct mq_attr msgq_attr;
    unsigned int prio1 = 1;
    unsigned int prio2;
    const char *file = "/myposix";

    msg1.len = 8;
    msg1.pi = 3.14159;
    msg2.len = 8;
    msg2.pi = 0;

    msgq_id = mq_open(file, O_RDWR | O_CREAT, S_IRWXU | S_IRWXG, NULL);

    if (msgq_id == (mqd_t) -1) {
        perror("mq_open error");
        exit(1);
    }

    printf("send pi is %f.\n",msg1.pi);

    if (mq_send(msgq_id, (char*) &msg1, sizeof(struct MsgType), prio1) == -1) {
        perror("mq_send");
        exit(1);
    }

    if (mq_getattr(msgq_id, &msgq_attr) == -1) {
        perror("mq_getattr");
        exit(1);
    }

    printf("msg size is %ld.\n",msgq_attr.mq_msgsize);

    if (mq_receive(msgq_id, (char*) &msg2, msgq_attr.mq_msgsize, &prio2) == -1) {
        perror("mq_receive");
        exit(1);
    }

    printf("recv pi is %f.\n",msg2.pi);

    if (mq_close(msgq_id) == -1) {
        perror("mq_close");
        exit(1);
    }

    if (mq_unlink(file) == -1) {
        perror("mq_unlink");
        exit(1);
    }

    return 0;
}

[20170510]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值