在应用程序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;
我认为问题是未设置unix_key,因此attach()中的shmget将失败。 handle()是私有的,所以我不能调用这个函数来设置unix_key。
是否可以在不知道其大小的情况下访问共享内存/调用create()?
当我尝试调用create()
时QSharedMemory shmem(key);
shmem.create(SHM_DATASIZE);
将创建一个新的共享内存......
我做错了什么?提前谢谢。