首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QSharedMemory无法生成密钥

QSharedMemory无法生成密钥
EN

Stack Overflow用户
提问于 2012-08-06 16:58:46
回答 1查看 2.6K关注 0票数 1

我是Qt的新手,我想使用QSharedMemory作为工具,在运行时将一些应用程序连接在一起。我已经签出了QSharedMemory示例,并提取了使用它所需的所有内容。

这里的问题是QSharedMemory实例无法分配内存。当我调用create()时,它返回false,当我打印存储在errorString()中的错误消息时,它显示以下错误:

QSharedMemory::create: unable to make key

我的代码片段类似于:

代码语言:javascript
复制
QSharedMemory sharedmemory;
if(sharedmemory.isAttached())
    sharedmemory.detach();

QString st = "this is the shared data";
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
QDataStream out(&buffer);
out << st;
int size = buffer.size();

if(!sharedmemory.create(size))
{
    std::cout<<sharedmemory.errorString().toStdString()<<std::endl;
    return 1;
}

无论我将什么作为size赋给create()方法,它都不会分配内存。

任何想法都是有价值的。谢谢马赫迪

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 01:13:18

来自qsharedmemory_unix.cpp的源代码

代码语言:javascript
复制
// build file if needed
int built = createUnixKeyFile(nativeKey);
if (built == -1) {
    errorString = QSharedMemory::tr("%1: unable to make key").arg(QLatin1String("QSharedMemory::create"));
    error = QSharedMemory::KeyError;
    return false;
}

来自QSharedMemory的Qt文档

QSharedMemory::QSharedMemory ( const QString & key, QObject * parent = 0 )

使用给定的父对象构造一个共享内存对象,并将其键设置为key。因为设置了它的键,所以可以调用它的create()attach()函数。

另请参阅setKey()create()attach()

QSharedMemory::QSharedMemory ( QObject * parent = 0 )

此函数重载QSharedMemory()

构造一个具有给定父级的共享内存对象。共享内存对象的键不是由构造函数设置的,因此共享内存对象没有附加底层共享内存段。在使用create()attach()之前,必须使用setKey()设置密钥。

另请参见setKey()

(强调我的)

您基本上是在使用第二种形式的构造函数,而不是设置共享内存键。您应该为QSharedMemory提供一个密钥名称-有关此密钥可以是什么的信息,请咨询shm_open。请注意,在Linux POSIX中,共享内存是作为/dev/shm中的一个文件系统实现的,并且对键名有一定的限制-它不能在任何地方包含正斜杠(/),除非在名称的开头,因为有了正斜杠(/)就需要在/dev/shm中创建目录,而shm_open()QSharedMemory::createUnixKeyFile()都不愿意这样做。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11825212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档