linux下使用系统api打印usb设备的c代码
时间: 2024-09-26 18:16:09 浏览: 14
在Linux环境下,通过系统API访问USB设备通常涉及`libudev`库,它提供了一种简单的方式来处理USB设备的动态添加和移除。下面是一个简单的C代码示例,展示了如何使用`udev` API来获取USB设备的信息:
```c
#include <stdio.h>
#include <stdlib.h>
#include <libudev.h>
int main(int argc, char *argv[]) {
// 初始化udev context
struct udev *udev = udev_new();
if (udev == NULL) {
perror("Failed to initialize udev");
return -1;
}
// 设置查找规则匹配所有USB设备
const char *rule = "SUBSYSTEM==\"usb\"";
udev_monitor *monitor = udev_monitor_new_from_rule(udev, rule);
if (monitor == NULL) {
perror("Failed to create monitor");
goto error;
}
// 开始监听事件
int ret = udev_monitor_start_watching(monitor);
if (ret < 0) {
perror("Failed to start watching");
goto error;
}
// 循环处理接收到的事件
while (true) {
udev_device *device;
ret = udev_monitor_receive_one(monitor, &device);
if (ret < 0) {
perror("Error receiving event");
continue;
}
// 获取设备信息
const char *name = udev_device_get_name(device);
const char *product = udev_device_get_property_value(device, "ID_MODEL");
const char *vendor = udev_device_get_property_value(device, "ID_VENDOR");
printf("Device Name: %s\nProduct: %s\nVendor: %s\n", name, product, vendor);
// 清理并释放资源
udev_device_unref(device);
}
error:
udev_monitor_unref(monitor);
udev_unref(udev);
return 0;
}