本页内容

QDBusUnixFileDescriptor Class

QDBusUnixFileDescriptor 类保存一个 Unix 文件描述符。更多内容...

头文件: #include <QDBusUnixFileDescriptor>
CMake: find_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmake: QT += dbus

公共函数

QDBusUnixFileDescriptor()
QDBusUnixFileDescriptor(int fileDescriptor)
QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other)
~QDBusUnixFileDescriptor()
int fileDescriptor() const
bool isValid() const
void setFileDescriptor(int fileDescriptor)
void swap(QDBusUnixFileDescriptor &other)
QDBusUnixFileDescriptor &operator=(QDBusUnixFileDescriptor &&other)
QDBusUnixFileDescriptor &operator=(const QDBusUnixFileDescriptor &other)

静态公共成员

bool isSupported()

详细说明

QDBusUnixFileDescriptor 类用于保存一个 Unix 文件描述符,供Qt D-Bus 模块使用。这允许应用程序通过 D-Bus 连接发送和接收 Unix 文件描述符,并自动映射到 D-Bus 类型“h”。

QDBusUnixFileDescriptor 类型的对象也可作为信号和插槽的参数,这些信号和插槽通过注册QDBusConnection::registerObject 导出到 D-Bus。

QDBusUnixFileDescriptor 不会拥有该文件描述符的所有权。相反,它会使用 Unix 系统调用dup(2) 来复制该文件描述符。该文件描述符属于 QDBusUnixFileDescriptor 对象,用户不应将其存储或关闭。 如果您需要文件描述符,应自行创建副本。

可用性

并非所有 D-Bus 连接都支持 Unix 文件描述符传递。在 Unix 系统上,此功能自 D-Bus 库和总线守护进程 1.4 及更高版本起提供。如果编译时和运行时检测到此类版本,Qt D-Bus 会自动启用该功能。

要验证您的连接是否支持文件描述符传递,请通过 `QDBusConnection::connectionCapabilities()` 检查 `QDBusConnection::UnixFileDescriptorPassing ` 能力是否已设置。如果该标志未启用,则您将无法调用以 `QDBusUnixFileDescriptor` 为参数的方法,甚至无法将此类嵌入到变体中。您也不会收到包含该类型的调用。

另请注意,远程应用程序可能不支持 Unix 文件描述符的传递。如果您向无法接收此类类型的远程应用程序发送 D-Bus 请求,将收到错误回复。如果您尝试发送包含 D-Bus 文件描述符的信号,或在方法调用中返回此类参数,该消息将被静默丢弃。

即使该功能不可用,`QDBusUnixFileDescriptor` 仍将继续运行,因此代码无需在编译时检查该功能的可用性。

在非 Unix 系统上,QDBusUnixFileDescriptor 将始终报告无效状态,且QDBusUnixFileDescriptor::isSupported() 将返回 false。

另请参阅 QDBusConnection::ConnectionCapabilities 和QDBusConnection::connectionCapabilities()。

成员函数文档

QDBusUnixFileDescriptor::QDBusUnixFileDescriptor()

构建一个不包含封装文件描述符的 QDBusUnixFileDescriptor。这相当于使用一个无效的文件描述符(如 -1)来构建该对象。

另请参阅 fileDescriptor() 和isValid()。

[explicit] QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(int fileDescriptor)

通过复制fileDescriptor 参数来构建一个QDBusUnixFileDescriptor对象。原始文件描述符不会被修改,必须由用户手动关闭。

请注意,fileDescriptor() 返回的值将与传入的fileDescriptor 参数不同。

如果fileDescriptor 参数无效,isValid()将返回false,而fileDescriptor()将返回-1。

另请参阅 setFileDescriptor() 和fileDescriptor()。

QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other)

通过复制other 来构建一个QDBusUnixFileDescriptor对象。

[noexcept] QDBusUnixFileDescriptor::~QDBusUnixFileDescriptor()

销毁此QDBusUnixFileDescriptor 对象,并释放其中包含的 Unix 文件描述符。

int QDBusUnixFileDescriptor::fileDescriptor() const

返回此QDBusUnixFileDescriptor 对象所包含的Unix文件描述符。无效的文件描述符由值-1表示。

请注意,该函数返回的文件描述符归该 `QDBusUnixFileDescriptor ` 对象所有,不得在该对象生命周期结束后继续存储。在该对象有效期间使用该文件描述符是允许的,但如果需要将其保存以供长期使用,应使用 Unix 函数 `dup(2)`、`dup2(2) ` 或 `dup3(2) ` 对文件描述符进行克隆。

另请参阅 setFileDescriptor() 和isValid()。

[static] bool QDBusUnixFileDescriptor::isSupported()

如果该平台支持 Unix 文件描述符,则返回 `true `。换句话说,如果这是 Unix 平台,则该函数返回 `true `。

请注意,即使该函数返回false ,QDBusUnixFileDescriptor 仍将继续运行。唯一的区别在于,QDBusUnixFileDescriptor 对象将始终处于isValid() == false 的状态,且fileDescriptor() 将始终返回 -1。该类不会消耗任何操作系统资源。

bool QDBusUnixFileDescriptor::isValid() const

如果该 Unix 文件描述符有效,则返回true 。有效的 Unix 文件描述符不为 -1。

另请参阅 fileDescriptor()。

void QDBusUnixFileDescriptor::setFileDescriptor(int fileDescriptor)

将此QDBusUnixFileDescriptor 对象持有的文件描述符设置为fileDescriptor 的副本。原始文件描述符不会被修改,必须由用户手动关闭。

请注意,fileDescriptor() 返回的值将与传入的fileDescriptor 参数不同。

如果fileDescriptor 参数无效,isValid() 将返回 false,而fileDescriptor() 将返回 -1。

另请参阅 isValid() 和fileDescriptor()。

[noexcept] void QDBusUnixFileDescriptor::swap(QDBusUnixFileDescriptor &other)

将该文件描述符实例与other 互换。此操作速度极快,且绝不会失败。

[noexcept] QDBusUnixFileDescriptor &QDBusUnixFileDescriptor::operator=(QDBusUnixFileDescriptor &&other)

将other 移动并赋值给此处的QDBusUnixFileDescriptor 。

QDBusUnixFileDescriptor &QDBusUnixFileDescriptor::operator=(const QDBusUnixFileDescriptor &other)

从other QDBusUnixFileDescriptor 对象中复制Unix文件描述符。如果当前对象包含文件描述符,则会在复制之前对其进行妥善处理。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.