创建,写入,linux下挂接为0释放实例后释放内存,如果已经存在不能申请,可以attch指定内存后写入
#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>
#include<iostream>
using namespace std;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSharedMemory *shared = new QSharedMemory("testkey");
if(!shared->create(4800))
{
qDebug()<<"create erro"<<shared->error();
switch(shared->error())
{
case 4:
qDebug()<<"此内存已经存在";
break;
default:
qDebug()<<"其他错误";
break;
}
}
else
{
qDebug()<<"create success";
}
char mstr[4800]={0};
qDebug()<<"输入测试字符串";
cin>> mstr;
qDebug()<<"str:"<<mstr;
shared->lock();
char *data = (char*)shared->data();
memcpy(data,mstr,4800);
shared->unlock();
qDebug()<<"等待中,输入任意字符释放内存";
cin>>mstr;
shared->detach();
delete(shared);
return a.exec();
}
读,需要attch后读取,使用完后detach
#include <QCoreApplication>
#include <QSharedMemory>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QSharedMemory shared;
shared.setKey("testkey");
if(!shared.isAttached())
{
shared.attach();
if(!shared.isAttached())
{
qDebug()<<"共享内存进程挂接失败";
return 0;
}
else
{
qDebug()<<"共享内存进程挂接成功";
}
}
shared.lock();
char* str=(char*)shared.data();
qDebug()<<"str:"<<str;
shared.unlock();
shared.detach();
if(shared.isAttached())
{
qDebug()<<"共享内存进程分离失败";
}
else
{
qDebug()<<"共享内存进程分离成功";
}
return a.exec();
}