首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在C/C++中找到设备的挂载点?

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

Stack Overflow用户
提问于 2011-12-26 17:33:49
回答 1查看 3.4K关注 0票数 3

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

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

代码语言:javascript
复制
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,我设法找到了设备的挂载点,但是仍然有一个小问题。我假设设备只有一个分区。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-12-26 18:35:09

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8637854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档