Я столкнулся с определенной проблемой с libudev. Я написал поток прослушивателя, который постоянно прослушивает устройства, подключенные через usb. Я использовал API libudev udev_monitor_receive_device в начале непрерывного цикла while, так как это блокирующий вызов. Исходный код отлично работает с libudev v1.6.3, но при обновлении до v1.7.2 вызов udev_monitor_receive_device больше не блокируется, цикл while продолжает работать непрерывно, а API продолжает возвращать NULL. Ниже приведен фрагмент кода, который поможет вам понять использование libudev в моем коде.
struct udev *udevObject ;
struct udev_device *mDev;
struct udev_enumerate *enumerate;
struct udev_monitor *mUdevMonitorObject;
udevObject = udev_new();
if(NULL == udevObject){
LOGERR((TEXT("Listener thread :: Error initialising Udev Library\r\n")));
return false;
}
mUdevMonitorObject = udev_monitor_new_from_netlink(udevObject, "udev");
udev_monitor_enable_receiving(mUdevMonitorObject);
// enumerate = udev_enumerate_new(udevObject);
// udev_enumerate_scan_devices(enumerate);
while(1)
{
// This loop keeps running continuously on libudev v1.7.3, but the call blocks for v1.6.3
mDev = udev_monitor_receive_device(mUdevMonitorObject);
LOGINFO((TEXT("Listener thread:: Processing UDEV trigger\r\n")));
}
Эта проблема мучает меня давно. Любая помощь будет оценена по достоинству.