QDBusUnixFileDescriptor 类

QDBusUnixFileDescriptor 类用于保留一个 Unix 文件描述符。 更多...

头文件 #include <QDBusUnixFileDescriptor>
CMakefind_package(Qt6 REQUIRED COMPONENTS DBus)
target_link_libraries(mytarget PRIVATE Qt6::DBus)
qmakeQT += dbus

公共函数

QDBusUnixFileDescriptor()
QDBusUnixFileDescriptor(int fileDescriptor)
QDBusUnixFileDescriptor(const QDBusUnixFileDescriptor &other)
~QDBusUnixFileDescriptor()
intfileDescriptor() const
boolisValid() const
voidsetFileDescriptor(int fileDescriptor)
voidswap(QDBusUnixFileDescriptor &other)
QDBusUnixFileDescriptor &operator=(QDBusUnixFileDescriptor &&other)
QDBusUnixFileDescriptor &operator=(const QDBusUnixFileDescriptor &other)

静态公共成员

boolisSupported()

详细描述

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::ConnectionCapabilitiesQDBusConnection::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

请注意,即使此函数返回 falseQDBusUnixFileDescriptor 仍然会继续运行。唯一的区别在于,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和相应的标志是芬兰镭射线公司及其在世界各国/地区的商标。所有其他商标归各自所有者所有。