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() | |
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"。
QDBusUnixFileDescriptors 类型的对象还可用作信号和插槽的参数,这些信号和插槽可通过注册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 对象所有,在该对象的生命周期结束后不得存储。在该对象有效期内使用该文件描述符是可以的,但如果要将其保存更长时间,则应使用 Unixdup(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 文件描述符。如果当前对象包含一个文件描述符,它将在此之前被妥善处理。
© 2025 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.