QNativeIpcKey 类
QNativeIpcKey 类包含由 QSystemSemaphore 和 QSharedMemory 使用的本地密钥。 更多...
头文件 | #include <QNativeIpcKey> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
自 | Qt 6.6 |
公共类型
枚举类 | 类型 { SystemV, PosixRealtime, Windows } |
公共函数
QNativeIpcKey() | |
QNativeIpcKey(QNativeIpcKey::Type type) | |
QNativeIpcKey(const QString &key, QNativeIpcKey::Type type = DefaultTypeForOs) | |
QNativeIpcKey(const QNativeIpcKey &other) | |
QNativeIpcKey(QNativeIpcKey &&other) | |
~QNativeIpcKey() | |
bool | isEmpty() const |
bool | isValid() const |
QString | nativeKey() const |
void | setNativeKey(const QString &newKey) |
void | setType(QNativeIpcKey::Type type) |
void | swap(QNativeIpcKey &other) |
QString | toString() const |
QNativeIpcKey::Type | type() const |
QNativeIpcKey & | operator=(const QNativeIpcKey &other) |
QNativeIpcKey & | operator=(QNativeIpcKey &&other) |
静态公共成员
const QNativeIpcKey::Type | DefaultTypeForOs |
QNativeIpcKey | fromString(const QString &text) |
QNativeIpcKey::Type | legacyDefaultTypeForOs() |
相关非成员
size_t | qHash(const QNativeIpcKey &ipcKey, size_t seed) |
size_t | qHash(const QNativeIpcKey &ipcKey) |
void | swap(QNativeIpcKey &value1, QNativeIpcKey &value2) |
bool | operator!=(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs) |
bool | operator==(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs) |
详细说明
QSharedMemory 和 QSystemSemaphore 类使用称为“密钥”的全局标识符来标识其资源。Qt 使用 QNativeIpcKey 类对底层的密钥值以及密钥类型进行封装。
这两个类还提供了一种方法,可以从跨平台标识符创建本地密钥,使用QSharedMemory::platformSafeKey()和QSystemSemaphore::platformSafeKey()。应用程序不应共享这些函数的输入,因为Qt的不同版本可能会执行不同的转换,从而导致不同的本地密钥。相反,创建了IPC对象的程序应使用下面描述的方法来传达产生的本地密钥。
有关密钥类型、特定平台的限制以及与较老或非Qt应用程序的互操作性的详细信息,请参阅本地IPC密钥文档。这包括有关Apple平台上沙盒应用程序的重要信息,包括通过Apple App Store获取的所有应用程序。
向其他进程传达密钥
向其他Qt进程传达密钥
如果其他进程支持QNativeIpcKey,最佳的方法是通过从toString()获得的字符串表示形式进行通信,并使用fromString()进行解析。这种表示形式可以存储在具有已知名称的文件中,或在命令行中使用QProcess::setArguments()传递给子进程。
如果其他进程不支持QNativeIpcKey,那么两个进程可以交换nativeKey(),但旧代码可能无法调整其密钥类型。《a href="qnativeipckey.html#legacyDefaultTypeForOs" translate="no">legacyDefaultTypeForOs()函数返回旧代码使用的类型,这可能与DefaultTypeForOs常量不匹配。即使旧应用程序不是与新应用程序相同的构建(例如,是Qt 5应用程序),只要传递给Qt配置脚本的选项相同,这一点仍然正确。
向非Qt进程传达密钥
在与其他进程通信时,应用程序必须安排获取其他进程使用的密钥类型。这在这些Unix系统上尤为重要,其中PosixRealtime和SystemV都很常见。
本地密钥的字符串表示
QNativeIpcKey的字符串表示形式的格式旨在是稳定的,并且因此是前后兼容的,前提是这个键类型受特定Qt版本的支持。换句话说,较旧的Qt无法解析其后发布的键类型的字符串表示形式。然而,成功解析字符串表示形式并不意味着Qt类可以成功创建该类型的对象;应用程序应使用QSharedMemory::isKeyTypeSupported()和QSystemSemaphore::isKeyTypeSupported()验证支持。
字符串表示形式的格式由两个组件组成,由冒号(':')分隔。第一个组件是键类型,在下面的表中描述。第二个组件是特定类型的负载,使用percent-encoding。对于所有当前支持的关键类型,解码形式与nativeKey()字段的内容相同。
键类型 | 字符串表示 |
PosixRealtime | "posix" |
SystemV | "systemv" |
Windows | "windows" |
未标准的SystemV | "systemv-" 后跟一个十进制数字 |
此格式类似于 URI,可以使用 URI/URL 解析函数进行解析,例如 QUrl。当使用此类 API 解析时,键类型将显示为 方案,而有效载荷将是 路径。查询或片段的使用保留。
另请参阅 QSharedMemory 和 QSystemSemaphore。
成员类型文档
enum class QNativeIpcKey::Type
此枚举描述了 IPC 对象的后台类型。有关键类型详情,请参阅 Native IPC Keys 文档。
常量 | 值 | 说明 |
---|---|---|
QNativeIpcKey::Type::SystemV | 0x51 | X/Open 系统倡议(XSI)或 System V(SVr4)API |
QNativeIpcKey::Type::PosixRealtime | 0x100 | IEEE 1003.1b(POSIX.1b)API |
QNativeIpcKey::Type::Windows | 0x101 | Win32 API |
成员函数文档
[显式 constexpr noexcept]
QNativeIpcKey::QNativeIpcKey(QNativeIpcKey::Type type)
QNativeIpcKey::QNativeIpcKey(const QString &key, QNativeIpcKey::Type type = DefaultTypeForOs)
构造一个携带本地密钥 key(或无参数重载为空)适用于类型 type 的 QNativeIpcKey 对象。
[noexcept]
QNativeIpcKey &QNativeIpcKey::operator=(QNativeIpcKey &&other)
QNativeIpcKey &QNativeIpcKey::operator=(const QNativeIpcKey &other)
[noexcept]
QNativeIpcKey::QNativeIpcKey(QNativeIpcKey &&other)
QNativeIpcKey::QNativeIpcKey(const QNativeIpcKey &other)
复制或移动 other 的内容。
[constexpr noexcept]
QNativeIpcKey::QNativeIpcKey()
构建一个具有空键的 QNativeIpcKey 对象,类型为 DefaultTypeForOs。
[noexcept]
QNativeIpcKey::~QNativeIpcKey()
处置此 QNativeIpcKey 对象。
[static]
QNativeIpcKey QNativeIpcKey::fromString(const QString &text)
解析 text 的字符串形式并返回相应的 QNativeIpcKey。字符串表示形式有助于告知其他进程创建的键,以及其他进程应附加到该键。
如果字符串无法解析,该函数返回一个 无效 对象。
[noexcept]
bool QNativeIpcKey::isEmpty() const
如果nativeKey()为空,则返回true。
另请参阅nativeKey()。
[noexcept]
bool QNativeIpcKey::isValid() const
如果此对象包含有效的本地IPC密钥类型,则返回true。无效的类型通常是由于使用fromString()解析字符串表示形式失败而产生的。
此函数不对键字符串是否实际上受当前操作系统的支持或有效进行检查。
另请参阅type()和fromString()。
[static noexcept]
QNativeIpcKey::Type QNativeIpcKey::legacyDefaultTypeForOs()
返回对应于之前在Qt 6.6之前使用的本地IPC键的类型Type。QSharedMemory和QSystemSemaphore。必须与使用编译了Qt 6.6之前版本的任意类的代码保持兼容的应用程序和库可以使用此函数来确定其他应用程序可能使用的IPC类型。
请注意,此函数依赖于Qt具有相同的配置时间选项。
[noexcept]
QString QNativeIpcKey::nativeKey() const
返回与此对象关联的本地密钥字符串。
另请参阅setNativeKey()和type()。
void QNativeIpcKey::setNativeKey(const QString &newKey)
将此对象的本地密钥设置为newKey。
[constexpr]
void QNativeIpcKey::setType(QNativeIpcKey::Type type)
将此对象的IPC类型设置为type。
另请参阅type()和setNativeKey()。
[noexcept]
void Q NativeIpcKey :: swap (Q NativeIpcKey & other )
将other的本地IPC键和类型与此对象交换。此操作非常快且永远不会失败。
QString QNativeIpcKey :: toString () const
返回此对象的字符串表示形式。字符串表示形式对于告知其他进程创建此键以及它们应该附加到的进程非常有用。
如果当前对象无效,则此函数返回空字符串。
另请参阅fromString()。
[constexpr noexcept]
QNativeIpcKey::Type QNativeIpcKey :: type () const
返回与此对象关联的关键类型。
成员变量文档
const QNativeIpcKey::Type QNativeIpcKey::DefaultTypeForOs
此常量表达式变量保存当前操作系统默认的本地IPC类型。在Windows系统上是Type::Windows,在其他地方是Type::PosixRealtime。请注意,此常数与大多数Unix系统上Qt 6.6之前的QSharedMemory和QSystemSemaphore默认值不同;有关更多信息,请参阅legacyDefaultTypeForOs()。
相关非成员函数
[noexcept]
bool operator!=(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs)
[noexcept]
bool operator==(const QNativeIpcKey &lhs, const QNativeIpcKey &rhs)
如果lhs和rhs对象包含相同(或不同)的内容,则返回true。
[noexcept]
size_t qHash(const QNativeIpcKey &ipcKey, size_t seed)
返回ipcKey的哈希值,使用seed初始化计算。
[noexcept]
size_t qHash(const QNativeIpcKey &ipcKey)
返回ipcKey的哈希值,使用默认种子0
。
[noexcept]
void swap(QNativeIpcKey &value1, QNativeIpcKey &value2)
交换本地IPC键和类型value1与value2。此操作非常快且绝不会失败。
© 2024 The Qt Company Ltd. 本文档中包含的贡献物是各自所有者的版权。本处提供的文档是根据 Free Software Foundation 发布的GNU Free Documentation License version 1.3
的条款许可的。Qt及其相应标志是 The Qt Company Ltd.在芬兰和其他国家/地区的商标。所有其他商标均为各自所有者的财产。