QDBusUnixFileDescriptor 类
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 对象,不应由用户存储或关闭。相反,如果您需要此副本,则应创建自己的副本。
可用性
Unix 文件描述符传递并非在所有 D-Bus 连接中都可用。此功能在 Unix 系统上与 D-Bus 库和总线守护进程版本 1.4 及以上版本一起存在。编译时和运行时,Qt D-Bus 自动启用此功能,如果找到了此类版本。
要验证您的连接是否支持传递文件描述符,请检查是否有 QDBusConnection::UnixFileDescriptorPassing 功能设置为 QDBusConnection::connectionCapabilities()。如果标志未激活,那么您将无法调用具有 QDBusUnixFileDescriptor 作为参数的方法,甚至无法将此类类型嵌入到变体中。您也不会收到包含该类型的调用。
请注意,远程应用程序可能不支持Unix文件描述符传递。如果你向无法接收此类类型的远程应用程序发送D-Bus,你将收到一个错误回复。如果你尝试发送包含D-Bus文件描述符的信号或从方法调用返回文件描述符,该消息将被静默丢弃。
即使这个功能不可用,QDBusUnixFileDescriptor也将继续运行,所以代码不需要在编译时检查此功能的可用性。
在非Unix系统中,QDBusUnixFileDescriptor将始终报告无效状态,QDBusUnixFileDescriptor::isSupported()将返回false。
另请参阅QDBusConnection::ConnectionCapabilities和QDBusConnection::connectionCapabilities。
成员函数文档
QDBusUnixFileDescriptor::QDBusUnixFileDescriptor()
构造一个不包含包装文件描述符的QDBusUnixFileDescriptor。这相当于构造具有无效文件描述符(如-1)的对象。
另请参阅fileDescriptor()和isValid。
[显式]
QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(int fileDescriptor)
通过复制fileDescriptor参数构造一个QDBusUnixFileDescriptor对象。原始文件描述符不会受到影响,必须由用户关闭。
注意,fileDescriptor()返回的值将与传入的fileDescriptor参数不同。
如果fileDescriptor参数无效,isValid()将返回false,fileDescriptor()将返回-1。
另请参阅setFileDescriptor()和fileDescriptor。
QDBusUnixFileDescriptor::QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other)
通过复制other构造一个QDBusUnixFileDescriptor对象。
[非异常]
QDBusUnixFileDescriptor::~QDBusUnixFileDescriptor()
销毁此QDBusUnixFileDescriptor对象,并处理其包含的Unix文件描述符。
int QDBusUnixFileDescriptor::fileDescriptor() const
返回此QDBusUnixFileDescriptor对象包含的Unix文件描述符。无效的文件描述符用值-1表示。
请注意,此函数返回的文件描述符由QDBusUnixFileDescriptor对象拥有,并且不得在超出本对象生存周期的情况下存储。在其有效期间使用它是可以的,但如果你想长时间存储它,应该使用Unix的dup(2)
、dup2(2)
或dup3(2)
函数复制文件描述符。
另请参阅setFileDescriptor()和isValid。
[静态]
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文件描述符。如果当前对象包含文件描述符,它将在之前被适当地处置。
© 2024 Qt公司有限公司。此处包含的文档贡献的版权为各自所有者的版权。此处提供的文档根据自由软件基金会发布的 GNU自由文档许可版1.3 的条款颁发。Qt和相应的标志是芬兰镭射线公司及其在世界各国/地区的商标。所有其他商标归各自所有者所有。