我正在学习第一次在 Ubuntu 12.10 上使用 libusb v1.0.0。这是我用来尝试了解如何使用此 API 的一些小测试代码:
#include <libusb-1.0/libusb.h>
...
libusb_device **list;
libusb_get_device_list(ctx, &list); // Returns 11 USB devices which is correct.
for (size_t idx = 0; list[idx] != NULL; idx ++)
{
libusb_device *dev = list[idx];
libusb_device_descriptor desc = {0};
int rc = libusb_get_device_descriptor(dev, &desc);
此时,rc == 0,意味着它应该已经成功完成了。来源:*libusb_get_device_descriptor()* 的文档。
但结构desc
总是空的。没有一个字段被设置。如果我将上面的最后两行更改为:
libusb_device_descriptor desc = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int rc = libusb_get_device_descriptor(dev, &desc);
...然后当libusb_get_device_descriptor()
返回时,我看到desc
保持不变,向我确认我没有从这个 API 中得到我所期望的。
我还尝试以a.out
root 身份运行,以防万一这需要提升权限。进行谷歌搜索libusb_get_device_descriptor
并没有让我到任何地方。
我运行以尝试此代码的相关命令:
sudo apt-get install libusb-1.0.0-dev
g++ -ggdb test.cpp -lusb-1.0
./a.out
啊! 疯狂的用户错误!sharth 的代码帮我弄清楚了。这是我实际使用的代码——看看你是否能发现错误:
std::cout << "rc == " << libusb_get_device_descriptor(dev, &desc) << std::endl
<< "vendor == " << desc.idVendor << std::endl;
我猜编译器评估这个的方式,在实际desc.idVendor
调用之前可以自由评估libusb_get_device_descriptor()
。我的错。