Qt Linux 全局内存文件映射

Pad*_*ina 2 c++ linux qt shared-memory

所以我需要为Linux编写文件映射(Windows OpenFileMapping()MapViewOfFile()等等)。我就是QSharedMemory为了这个而选择的。但我不确定如何让它与全局内存一起工作。

是否有另一个正确的 Linux 文件映射模拟或功能QSharedMemory

nos*_*nos 6

QSharedMemory 用于在进程之间创建共享内存,而不是用于映射文件的内存。(参见官方Qt示例)。

对于内存映射文件,您可以简单地.map()在 QFile 上使用该函数,例如

QFile file("MyFile");
if (!file.open(QIODevice::ReadWrite)) {
     //handle error
}
uchar *memory = file.map(0, file.size());
if (memory) {
    //mapped ok, use memory here

    file.unmap();
} else {
   //handle error
}
Run Code Online (Sandbox Code Playgroud)

.map()函数继承自QFileDevice。默认情况下,映射在其他进程之间共享,您可以使用QFileDevice::MapPrivateOption创建私有映射,其中对映射内存的更改不与其他进程(或磁盘文件)共享。