关闭

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

219人阅读 评论(0) 收藏 举报
分类:

发送端

#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
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34090次
    • 积分:1096
    • 等级:
    • 排名:千里之外
    • 原创:74篇
    • 转载:27篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论