GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ2/3)
「GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ1/3)」の続き。ここではページ1の内容を踏まえた上での例を貼り付ける。コードのコンパイルにはGUdevライブラリの開発パッケージも必要。
例1
コマンド行引数に指定した場所のデバイス(例:/dev/sda, /dev/sda5など)の情報を取得し、表示する。
[任意]ファイル名: gudevtest.vala
/* * GUdevのテスト * コマンド行引数に指定したデバイスの情報を表示する * * valac --pkg posix --pkg gudev-1.0 gudevtest.vala -o gudevtest */ using Posix; using GUdev; namespace GUdevTest { int main (string[] args) { if (args.length < 2) { print ("USAGE: %s [DEVICE]\n", args[0]); return EXIT_SUCCESS; } // デバイス情報を問い合わせるクライアント(GUdev.Clientクラス) var c = new GUdev.Client (null); // デバイスファイルの場所を指定して情報(GUdev.Deviceクラス)を得る GUdev.Device dev = c.query_by_device_file (args[1]); // 情報が得られなかった場合 if (dev == null) { printerr ("Error: %s is not a device file\n", args[1]); return EXIT_FAILURE; } // 種類や名前はメンバ関数で取り出すことができる print ("----- %s (%s) -----\n", dev.get_name (), dev.get_devtype ()); // 全ての項目名(キー)を得て各項目ごとに処理する foreach (string? key in dev.get_property_keys ()) { // それぞれの情報(値)を取り出す // 種類や名前の情報もこの中に含まれる if (key != null) print ("%s: %s\n", key, dev.get_property (key)); } return EXIT_SUCCESS; } }
下は「/dev/sda」を指定した実行結果例。当然、環境によって出力内容は変わる。この例はVirtualBox上の仮想ディスクのものとなっている(出力された内容をそのままコピペしている)。
$ ./gudevtest /dev/sda ----- sda (disk) ----- UDEV_LOG: 3 DEVPATH: /devices/pci0000:00/0000:00:01.1/host0/target0:0:0/0:0:0:0/block/sda MAJOR: 8 MINOR: 0 DEVNAME: /dev/sda DEVTYPE: disk SUBSYSTEM: block ID_ATA: 1 ID_TYPE: disk ID_BUS: ata ID_MODEL: VBOX_HARDDISK ID_MODEL_ENC: VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20 ID_REVISION: 1.0 ID_SERIAL: VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_SERIAL_SHORT: VBa43f2b61-9e54e516 ID_ATA_WRITE_CACHE: 1 ID_ATA_WRITE_CACHE_ENABLED: 1 ID_ATA_FEATURE_SET_PM: 1 ID_ATA_FEATURE_SET_PM_ENABLED: 1 ID_SCSI_COMPAT: SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516 ID_PATH: pci-0000:00:01.1-scsi-0:0:0:0 ID_PART_TABLE_TYPE: dos UDISKS_PRESENTATION_NOPOLICY: 0 UDISKS_PARTITION_TABLE: 1 UDISKS_PARTITION_TABLE_SCHEME: mbr UDISKS_PARTITION_TABLE_COUNT: 5 UDISKS_ATA_SMART_IS_AVAILABLE: 0 DEVLINKS: /dev/block/8:0 /dev/disk/by-id/ata-VBOX_HARDDISK_VBa43f2b61-9e54e516 /dev/disk/by-id/scsi-SATA_VBOX_HARDDISK_VBa43f2b61-9e54e516 /dev/disk/by-path/pci-0000:00:01.1-scsi-0:0:0:0
これはディスク全体を指し示すデバイス名を指定した例でモデル名なども表示されているが、「/dev/sda5」のようなパーティションを示すデバイス名を指定するとそのパーティションのファイルシステムの種類やUUIDなども取得できる(これを含む出力はページ3の中で貼り付ける)。
(「GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ3/3)」に続く)
関連記事:
- GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ1/3)
- GUdevライブラリでGNU/Linuxシステム上のデバイス情報を取得する(ページ3/3)
- システム上の全ディスク(disk)の各パーティションにあるファイルシステムのUUIDをGUI上で確認・クリップボードにコピーできるツールを作成
使用したバージョン:
- Vala 0.9.8
- GUdev 151