c - 如何在 C/C++ 中找到设备的挂载点?

标签 c detection hal mount-point

我正在使用 libhal 来检测设备事件。我能够检测到添加或删除的设备,但无法检测到设备的安装点。函数 libhal_volume_get_mount_point(volume) 不起作用。

我有一个回调函数来检测设备添加:

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 语言检测存储设备挂载点的合适方法吗?

更新

我已经设法通过搜索/etc/mtab 找到了设备的挂载点,但还有一个小问题。我假设设备只有一个分区。

如何获取存储设备上的分区列表?所以我可以找到每个的挂载点。

最佳答案

首先,如果您提供有关尝试使用 libhal 函数时失败原因的更多详细信息,您可能会得到有助于解决该问题的答案。但是要直接回答您的问题,C 程序可以通过读取/etc/mtab 来确定安装的位置。该格式相当不言自明,每行通常会列出存储设备的名称、安装目录、文件系统类型和安装选项。

要将文件系统中的特定目录映射到它所属的挂载点可能有点棘手——请记住,如果您循环遍历/etc/mtab,挂载点下面可以有其他挂载点。

您可能会发现查看源代码可以正确执行此操作,例如“df”将帮助您正确执行此操作,或者如果您的程序不需要经常查找此信息,您可能会决定简单地调用 popen (3) 在 df 命令上为您完成。例如,命令:df/media/my-volume/some/path 可以很好地显示存储设备的名称和安装该设备的安装点。

关于c - 如何在 C/C++ 中找到设备的挂载点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8637854/

相关文章:

c - 对音频信号应用滤波器时的不同输出

c - 在 C 中使用 socket_stream 传输 jpg 文件

c - 如何在 C 中将 uword 的低 10 位转换为十六进制

c++ - 为什么我的STM32F7每43秒才中断一次?

putty - 使用 PuTTY 从 STM32 打印

android - 让 Android 使用新的音频 HAL 需要什么

ios - 我可以在我的 Swift iPhone 应用程序中使用 C 语言吗?

javascript - 点击时检测谷歌浏览器,如果不是则重定向

audio - 吉他和弦检测

machine-learning - 我在哪里可以找到 ImageNet VID 数据集?