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