使用QSharedMemory附加现有的共享内存

时间:2017-02-22 11:54:16

标签: c++ c qt qsharedmemory

在应用程序1(C代码)中创建一个共享内存,如下所示:

char * key_path = "/tmp/shmem";

int file = open(key_path, O_CREAT | O_RDWR | O_APPEND, 0755);
close(file);
key_t key = ftok(key_path, 1);

shmid = shmget (key, SHM_DATASIZE , IPC_CREAT | SHM_R | SHM_W);
shmdata = shmat(shmid, NULL, 0);shmid);

在应用程序2(QT)中,我想访问此SharedMemory

const char* native_key = "/tmp/shmem";

key_t ft_key = ftok(native_key, 1);
key = QString::number(ft_key);

QSharedMemory shmem(key);
if(!shmem.attach()) {
    qDebug() << "attach failed" << shmem.errorString()  << shmem.key() << shmem.nativeKey() << endl;
}
  

附加失败&#34; QSharedMemory :: attach(shmget):不存在&#34; &#34; 16858191&#34; &#34; / TMP / qipc_sharedmemory_24384b85e5d54b23bd4f84f14de71b10d4801666&#34;

所以我尝试了以下

const char* native_key = "/tmp/shmem";

key_t ft_key = ftok(native_key, 1);
key = QString::number(ft_key);

QSharedMemory shmem(key);
shmem.setNativeKey(native_key);
if(!shmem.attach()) {
    qDebug() << "attach failed" << shmem.errorString()  << shmem.key() << shmem.nativeKey() << endl;
}
  

附加失败&#34; QSharedMemory :: attach(shmget):不存在&#34; &#34;&#34;   &#34; / TMP / shmem_prot&#34;

我已经看了qsharedmemory_unix.cpp

的来源

我认为问题是未设置unix_key,因此attach()中的shmget将失败。 handle()是私有的,所以我不能调用这个函数来设置unix_key。

是否可以在不知道其大小的情况下访问共享内存/调用create()?

当我尝试调用create()

QSharedMemory shmem(key);
shmem.create(SHM_DATASIZE);

将创建一个新的共享内存......

我做错了什么?提前谢谢。

0 个答案:

没有答案