我面臨着libudev的某個問題。我寫了一個監聽線程,不斷監聽通過USB連接的設備。我在連續的while循環開始時使用了libudev API udev_monitor_receive_device,因爲它是一個阻塞調用。這個源代碼在libudev v1.6.3中可以正常工作,但是當升級到v1.7.2時,對udev_monitor_receive_device的調用不再被阻止,並且while循環持續運行,並且api始終返回NULL。下面是代碼,這將有助於你理解我的代碼libudev使用的部分..libudev奇怪的行爲v1.7.2以上
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")));
}
這個問題一直纏着我很長一段時間。任何幫助,將不勝感激。
您是否檢查了文檔,以便API或其行爲沒有改變?否則,它可能是一個錯誤,應該直接指向libudev開發人員,而不是SO。 –