Qt / C ++访问来自不同程序的映射内存文件

时间:2016-05-05 17:05:52

标签: c++ matlab qt memory-mapped-files qsharedmemory

我希望为Qt应用程序(可以使用任何c ++方法或库)实现一种方法来访问/查找由Matlab进程创建的映射内存文件。我已经阅读了几个examples如何在特定环境中执行共享内存(即在Matlab或Qt或VS中创建的2个进程),但没有人谈论如何从另一个程序中查找映射文件。有没有办法做到这一点?

这是我的Matlab脚本,用于映射文件:

filename = fullfile(tempdir, 'test.dat');
[f,~]=fopen(filename,'wb');
fwrite(f,67,'uint8');
fclose(f);

m = memmapfile(filename,'Writable',true,'Format','uint8');
keyboard

我真的不想从Qt写入映射文件,现在我只想知道它是否存在,然后可能在将来写入它。在Qt中我唯一能想到的就是查看文件是否存在,但我的尝试基本上是有缺陷的,因为据我所知,我想知道文件是否被映射(寻找内存地址?)而不是它是否存在在硬盘上。

#include <QCoreApplication>
#include <QSharedMemory>
#include <QFile>
#include <QTextStream>
#include <QString>

void read(QString filename)
{
    QFile file(filename);
    if (!file.exists()) {
        QTextStream(stdout) << "File does not exist!" << endl;
    }
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QString filename = "C:/Users/Engineer/AppData/Local/Temp/test.dat";
    read(filename);

    return a.exec();
}

有没有人试图这样做?有人能指出我正确的方向吗?

0 个答案:

没有答案