기존 USB 허브와 허브에 연결된 장치를 나열하려면 C++ 프로그램을 사용해야 합니다.
다음 명령을 사용하여 USB 허브와 허브에 연결된 장치를 터미널에서 인쇄할 수 있습니다.
lsusb
lsusb -v
내 C++ 프로그램에서 이 기능을 사용하고 싶습니다.
프로그래밍 방식으로 이 작업을 어떻게 수행할 수 있습니까? Qt 애플리케이션에서 사용할 수 있는 C++ 클래스가 있습니까?
답변1
이것은 가장 간단한 시뮬레이션입니다 lsusb
.
#include <stdio.h>
#include <usb.h>
main(){
struct usb_bus *bus;
struct usb_device *dev;
usb_init();
usb_find_busses();
usb_find_devices();
for (bus = usb_busses; bus; bus = bus->next)
for (dev = bus->devices; dev; dev = dev->next){
printf("Trying device %s/%s\n", bus->dirname, dev->filename);
printf("\tID_VENDOR = 0x%04x\n", dev->descriptor.idVendor);
printf("\tID_PRODUCT = 0x%04x\n", dev->descriptor.idProduct);
}
}
컴파일용-lusb
답변2
이것은 Fedora입니다. Debian 기반 배포판의 경우 비슷한 작업을 수행할 수 있습니다.
- 프로그램이 포함된 패키지를 가져옵니다. "rpm -qif /usr/bin/lsusb"는 이 프로그램이 usbutils 패키지에서 제공된다는 것을 알려주며 홈페이지는 다음과 같습니다.http://www.linux-usb.org
- 거기에 게시된 소스 코드를 확인하세요. (아마도 C로 되어 있으면 거기에서 필요한 것을 쉽게 추출할 수 있을 것입니다.)
또는:
- 커널이 USB 설정에 대한 정보를 게시하는 위치/방법을 알아보세요. 예: /sys/bus/usb/devices는 전체 설정을 표시합니다.
- 정보가 어떻게 구성되어 있는지 이해합니다(파싱을 쉽게 하기 위해 설정되었으므로 처리하기가 너무 어렵지 않습니다).
절박한 해결책:
- lsusb(8) 프로그램 자체를 실행하고 출력에서 필요한 데이터를 얻으십시오.
그런데 GUI 애플리케이션을 작성하려면 C++ 대신 Python을 사용하는 것을 고려해 보세요. GUI는 성능에 거의 영향을 미치지 않으며 프로그래머 시간 절약은 효율성 손실을 상쇄하기에 충분합니다(사용자는 이를 알아차리지 못할 수도 있습니다).