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はパフォーマンスにほとんど影響を与えず、プログラマーの時間を節約することは効率の損失を相殺するのに十分です(ユーザーはそれに気付かないかもしれません)。

関連情報