私はlibudevと、特定の問題に直面しています奇妙な行動v1.7.2をlibudev。私は、USB経由で接続されたデバイスを絶えず聴いているリスナースレッドを書いています。それはブロッキング・コールであるように私は連続whileループの開始時にlibudevのAPIのudev_monitor_receive_deviceを使用していました。ソースは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")));
}
です。どんな助けもありがとう。
APIまたはその動作が変更されていないようにドキュメントを確認しましたか?それ以外の場合はバグかもしれませんので、libudevの開発者に指示してください。そうではありません。 –