将现有的共享内存与qsharedMemory一起
Attach existing Shared Memory with QSharedMemory
在应用程序1(c代码)IM创建类似的共享内存:
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)中,我想访问此共享模式
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 :: atchect(shmget):不存在"。
所以我已经尝试了以下
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 :: attecon(shmget):不存在"" "/tmp/shmem_prot"
我已经看了qsharedmemory_unix.cpp
的来源我认为问题是未设置unix_key,因此()中的shmget将失败。handing()是私有的,所以我不能称此功能设置Unix_key。
是否可以访问共享内存而不知道IT的大小/调用Create()?
当我尝试调用create()
时QSharedMemory shmem(key);
shmem.create(SHM_DATASIZE);
将创建一个新的共享内存...
我在做什么错?预先感谢。
您无法访问相同的共享内存段。QT修改了您传递的密钥,结果是另一个密钥,因此是共享的内存ID。
根据qsharedmemory文档:
警告:qsharedMemory以QT特定方式更改键,除非另有说明。与非QT应用程序的互操作是 通过首先创建默认共享内存来实现
QSharedMemory()
,然后使用setNativeKey()
设置本机键。 使用本机键时,共享内存不受保护 它上的多个访问(例如,无法lock()
)和一个 用户定义的机制应用于实现此类保护。
似乎您需要使用QSharedMemory
创建共享内存段,使用setNativeKey()
设置新键,然后从QSharedMemory
的外部附加到该内存。
相关文章:
- 如何将enable-if与模板参数和参数包一起使用
- 如何将PERF_AMPLE_READ与mmap一起使用
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将C++中的库和头与MinGW一起使用
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- 为什么我不能将 rand() 与数组的大小一起使用?
- 要与"if constexpr"一起使用的编译时消息(在预处理器之后)
- 不能将复制初始化与隐式转换的多个步骤一起使用
- 将fold表达式与std::一起用于两个元组
- spdlog标头仅与外部fmt一起使用.spdlog错误:'内部':不是'fmt'
- 将 std::allocate_shared 与多态资源分配器一起使用
- 为什么常量词在重载运算符中不与 ostream 对象一起使用<<?
- 将 OpenCV 与 CMAKE 中的项目一起构建为第三方库的正确方法
- 将 exprtk 与自定义类的对象一起使用
- 将 std::set 与基于键的比较器一起使用
- 将 C++ 类与 Rcpp 一起使用,从 C 或 R 修改它
- 如何将 Eigen::Ref 与 pybind11 一起使用?
- 如何将AERT_Allocate与 std:vector 一起使用
- 如何使我的 sizeof sum 结构与空参数包一起工作
- 将现有的共享内存与qsharedMemory一起