lspci風のものをC++で書く

目次

PCI device名やvender名、pathを取得するにはどうすればいいかということを書きます。

サンプルコード

準備

必要なパッケージをインストールする必要があります。
  • CentOS : pciutils-devel
  • Ubuntu : libpci-dev

コード

手順としては pci_access を初期化し PCIデバイスのリストを取得します。
このリストはpci_devの片方向リストとなっています。
pci_devにはdevice IDやvender ID、busなどの情報が詰め込まれいています。

この情報からdevice名やvender名などの文字列を取得したい場合は

char vender_name[128];
pci_lookup_name(p_access, vender_name, sizeof(vender_name), PCI_LOOKUP_VENDOR, p_dev->vendor_id);
のようにpci_lookup_name関数を用います。

コンパイル

コンパイル時のオプションはこんな感じです。

g++ main.cpp -std=c++11 -lpci

C++でpci/pci.hをincludeする場合はextern "C"しないとリンク時にエラーが出るかもしれないです。

カテゴリー:C++
記事作成日:2020-06-13