試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

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)」に続く)

関連記事:

使用したバージョン:

  • Vala 0.9.8
  • GUdev 151