linux qt共享库,使用linux共享内存机制完成Qt与应用程序之间的通讯,Qt加载制做本身的共享内存静态库!!!...

使用linux共享内存机制完成Qt与应用程序之间的通讯,Qt加载制做本身的共享内存静态库html

首先完成共享内存小程序,源码:linux

shm.h头文件的程序:小程序

#ifndef SHM_H

#define SHM_H

#ifdef __cplusplus

extern "C"{

#endif

typedef struct {

char name[4];

int age;

}people;

people* initshm(void);

void *Create_sharememory(const char *filename,unsigned int SizeCount);

void close_sharememory(void *pshare);

int get_age(people *p);

void set_age(people *p,int age);

#ifdef __cplusplus

}

#endif

#endif

再编写main.cpp函数完成静态库和头文件的调用函数

编译:g++ -o shm main.cpp -L. -lshmui

运行:./shmthis

运行成功。spa

使用Qt程序加载前面制做的静态库.net

shm.cpp源文件的程序:unix

#include

#include

#include

#include

#include

#include

#include

#include "shm.h"

const char *shmfile="/usr/local/sharememory1/huangchao.txt";

people* initshm(void)

{

people *p = (people *)Create_sharememory(shmfile,sizeof(people));

if(p == NULL)

printf("create sharememory failed!\n");

return p;

}

void *Create_sharememory(const char *filename,unsigned int SizeCount)

{

int shm_id,fd;

key_t key;

void *pshare;

const char *path=filename;

if((fd=open(path,O_RDWR|O_CREAT))<0)

{

perror("opne");

return 0;

}

close(fd);

key=ftok(path,10);

if(key==-1)

{

perror("ftok error\n");

return 0;

}

if((SizeCount%2)!=0)

SizeCount++;

shm_id = shmget(key,SizeCount,IPC_CREAT);

if(shm_id==-1)

{

perror("shmget error\n");

return 0;

}

pshare = shmat(shm_id,NULL,0);

if(pshare==NULL)

{

return 0;

}

return pshare;

}

void close_sharememory(void *pshare)

{

if(shmdt(pshare)==-1)

perror("detach error");

}

int get_age(people *p)

{

return p->age;

}

void set_age(people *p,int age)

{

p->age=age;

}

把shm.cpp制做成静态库libshm,命令以下code

g++ -c shm.cpp //生成shm.o连接文件

生成静态库,命令以下:

ar cr libshm.a shm.o //生成静态库

main.cpp源文件的程序:

#include

#include

#include

#include

#include

#include

#include

#include "shm.h"

int main()

{

int age;

people *t;

t=initshm();

set_age(t,20);

age = get_age(t);

printf("%d\n",age);

return 0;

}

再编写main.cpp函数完成静态库和头文件的调用

编译:g++ -o shm main.cpp -L. -lshm

生成了shm可执行文件

运行:./shm

运行成功。

使用Qt程序加载前面制做的静态库和头文件,分别把静态库文件libshm.a和头文件shm.h拷贝到本身所建的工程文件夹中,并在工程的源文件中添加头文件#include“shm.h”,以下所示

main.cpp源文件的程序:

#include "mainwindow.h"

#include "ui_mainwindow.h"

#include "shm.h"

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

ui->label->setText("nihao");

int age;

people *t;

t=initshm();

set_age(t,20);

age = get_age(t);

ui->label->setText(QString::number(age));

}

MainWindow::~MainWindow()

{

delete ui;

}

而后在pro工程文件中加入LIBS+=-L./-lshm这样qt就能加载非官方的静态库了。

转载的原地址:http://blog.chinaunix.net/uid-26498888-id-3270926.html

参考资料:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值