linux程序通过消息队列传输数据

发送端

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <QMessageBox>

#define SYS_MSG_KEY_VALUE 1002         // 消息队列键值

struct msgstru{
    long mtype; //大于0
    char mtext[512];
};

struct msgstru msg;
int qid = -1;

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}


Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    msg.mtype = 1;
    char *c="aaaa";
    memcpy(msg.mtext,c,strlen(c));
   ssize_t ret_value = msgsnd(qid,&msg,sizeof(struct msgstru),IPC_NOWAIT);
   if(ret_value < 0)
       QMessageBox::warning(NULL,"aaaa","aaaa",QMessageBox::Yes);
}

void Widget::on_pushButton_2_clicked()
{
     msgctl(qid,IPC_RMID,0);
}

void Widget::on_pushButton_3_clicked()
{
    qid = msgget(SYS_MSG_KEY_VALUE,IPC_CREAT|0666);
    if(qid <0 || qid ==65536)
        QMessageBox::warning(NULL,"aaaa","aaaa",QMessageBox::Yes);
}

接受端

#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define SYS_MSG_KEY_VALUE 1002         // 消息队列键值

struct msgstru{
    long mtype; //大于0
    char mtext[512];
};

struct msgstru msg;

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_pushButton_clicked()
{
    int qid = msgget(SYS_MSG_KEY_VALUE,IPC_EXCL);
    if(qid < 0 || qid == 65536)
        return;
    while(1)
    {
        sleep(2);
        memset(msg.mtext,0,512);
        ssize_t size = msgrcv(qid,&msg,sizeof(struct msgstru),0,0);
        if(size > 0)
        {
        printf("%s\n",msg.mtext);
        fflush(stdout);
        }
    }
}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值