HDEVNOTIFY在linux qt 替换
时间: 2023-12-17 22:04:37 浏览: 23
在 Linux Qt 中,可以使用 udev 库来替换 HDEVNOTIFY。udev 库是一个动态设备管理库,它可以监视系统中的设备添加和删除事件,并根据这些事件执行自定义操作。
以下是一个简单的示例代码,演示如何使用 udev 库来监听设备添加和删除事件:
```cpp
#include <QtCore>
#include <libudev.h>
int main(int argc, char *argv[])
{
QCoreApplication app(argc, argv);
struct udev *udev = udev_new();
if (!udev) {
qCritical() << "Failed to create udev context";
return -1;
}
struct udev_monitor *monitor = udev_monitor_new_from_netlink(udev, "udev");
if (!monitor) {
qCritical() << "Failed to create monitor";
return -1;
}
if (udev_monitor_filter_add_match_subsystem_devtype(monitor, "usb", NULL) < 0) {
qCritical() << "Failed to add filter";
return -1;
}
if (udev_monitor_enable_receiving(monitor) < 0) {
qCritical() << "Failed to enable receiving";
return -1;
}
int fd = udev_monitor_get_fd(monitor);
QSocketNotifier notifier(fd, QSocketNotifier::Read);
QObject::connect(¬ifier, &QSocketNotifier::activated, [&]() {
struct udev_device *dev = udev_monitor_receive_device(monitor);
if (dev) {
QString action = QString::fromUtf8(udev_device_get_action(dev));
QString device = QString::fromUtf8(udev_device_get_devnode(dev));
qDebug() << "Device" << device << "was" << action;
udev_device_unref(dev);
}
});
return app.exec();
}
```
这段代码会监听 USB 设备添加和删除事件,并在控制台输出相应的信息。你可以根据需要修改代码来监听特定的设备类型或子系统。