libusb
是一个开源的跨平台库,用于与USB设备进行通信。在Linux系统中,libusb
提供了访问USB设备的API,允许开发者读取和写入USB设备的数据,以及控制设备的各种功能。
以下是一个简单的libusb-1.0
在Linux下的使用示例,该示例展示了如何枚举系统中的USB设备并打印它们的基本信息。
#include <stdio.h>
#include <libusb.h>
int main() {
libusb_device **devs;
libusb_device_handle *dev_handle;
ssize_t cnt;
int r;
// 初始化libusb
r = libusb_init(NULL);
if (r < 0) {
fprintf(stderr, "Init Error %d\n", r);
return 1;
}
// 获取USB设备列表
cnt = libusb_get_device_list(NULL, &devs);
if (cnt < 0) {
fprintf(stderr, "Get Device Error\n");
libusb_exit(NULL);
return 1;
}
// 遍历设备列表
for (ssize_t i = 0; i < cnt; ++i) {
struct libusb_device_descriptor desc;
r = libusb_get_device_descriptor(devs[i], &desc);
if (r < 0) {
fprintf(stderr, "Failed to get device descriptor\n");
continue;
}
printf("Device Descriptor:\n");
printf(" bLength %5d\n", desc.bLength);
printf(" bDescriptorType %5d\n", desc.bDescriptorType);
printf(" bcdUSB %2x.%02x\n", desc.bcdUSB >> 8, desc.bcdUSB & 0xff);
printf(" idVendor 0x%04x\n", desc.idVendor);
printf(" idProduct 0x%04x\n", desc.idProduct);
printf(" bcdDevice %2x.%02x\n", desc.bcdDevice >> 8, desc.bcdDevice & 0xff);
printf(" iManufacturer %5d\n", desc.iManufacturer);
printf(" iProduct %5d\n", desc.iProduct);
printf(" iSerial %5d\n", desc.iSerialNumber);
printf(" bNumConfigurations %5d\n", desc.bNumConfigurations);
printf("\n");
}
// 释放设备列表
libusb_free_device_list(devs, 1);
// 退出libusb
libusb_exit(NULL);
return 0;
}
要编译上述程序,你需要安装libusb-1.0
的开发包,并使用以下命令进行编译:
gcc -o list_usb_devices list_usb_devices.c $(pkg-config --cflags --libs libusb-1.0)
然后,你可以运行生成的可执行文件来查看系统中的USB设备信息:
./list_usb_devices
plugdev
组或使用sudo
来解决。lsusb
命令检查设备是否出现在系统中。libusb
版本与代码兼容。使用pkg-config
来获取正确的编译和链接标志。通过上述步骤,你可以在Linux系统中使用libusb
库来枚举和打印USB设备的基本信息。
领取专属 10元无门槛券
手把手带您无忧上云