私はデバイスイベントを検出するためにlibhalを使用しています。追加または削除されたデバイスを検出できましたが、デバイスのマウントポイントを検出できません。関数libhal_volume_get_mount_point(volume)
は機能しません。C/C++でデバイスのマウントポイントを見つける方法はありますか?
私は、デバイスの追加を検出するためにコールバック関数を持っている:
static void handle_device_added(LibHalContext *ctx, const char *udi) {
dbus_bool_t is_storage;
dbus_bool_t is_volume;
is_storage = libhal_device_query_capability(ctx, udi, "storage", NULL);
is_volume = libhal_device_query_capability(ctx, udi, "volume", NULL);
if (is_storage) {
drive = libhal_drive_from_udi(ctx, udi);
if (libhal_drive_is_hotpluggable(drive) || libhal_drive_uses_removable_media(drive)) {
printf("Storage device added %s model %s\n",
libhal_drive_get_device_file(drive),
libhal_drive_get_model(drive));
}
libhal_drive_free(drive);
}
if(is_volume) {
volume = libhal_volume_from_udi(ctx, udi);
printf("Mount point = %s\n", libhal_volume_get_mount_point(volume));
libhal_volume_free(volume);
}
}
libhal_volume_from_udiは、NULLを返します。
Cでストレージデバイスのマウントポイントを検出する適切な方法はありますか?
UPDATE
私は/etc/mtab
を検索することにより、デバイスのマウントポイントを見つけるために管理しているが、1つの小さな問題がまだあります。デバイスに1つのパーティションしかないと仮定しています。
ストレージデバイス上のパーティションのリストを取得するにはどうすればよいですか?だから私はそれぞれのマウントポイントを見つけることができます。
私のコードを追加しました。ご回答有難うございます。 –
mtapでデバイス名を検索しようとします。 –
私は '/ etc/mtab'で成功しましたが、私はまだ少し問題があります:接続されたデバイスが1つのパーティションを持っていると仮定しています。ストレージデバイスのパーティション情報を取得するにはどうすればよいですか? –