C++에서 USB 장치 정보 찾기 [닫기]

C++에서 USB 장치 정보 찾기 [닫기]

기존 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는 성능에 거의 영향을 미치지 않으며 프로그래머 시간 절약은 효율성 손실을 상쇄하기에 충분합니다(사용자는 이를 알아차리지 못할 수도 있습니다).

관련 정보