Как найти точку монтирования устройства в C / C ++? - PullRequest
3 голосов
/ 26 декабря 2011

Я использую 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, но все еще есть одна небольшая проблема.Я предполагаю, что устройство имеет только один раздел.

Как получить список разделов на устройстве хранения?Так что я могу найти точки монтирования каждого.

1 Ответ

1 голос
/ 26 декабря 2011

Во-первых, если вы предоставите более подробную информацию о том, что не получается при попытке использовать функцию libhal, вы можете получить ответы, которые помогут решить эту проблему.Но чтобы ответить на ваш вопрос напрямую, программа на C может определить, что и где монтируется, прочитав / etc / mtab.Формат достаточно понятен, в каждой строке обычно указывается имя устройства хранения, каталог, в котором оно смонтировано, тип файловой системы и параметры монтирования.

Чтобы сопоставить конкретный каталог в файловой системе сТочка монтирования, которой она принадлежит, может быть немного хитрой - помните, если вы просматриваете / etc / mtab, у точек монтирования могут быть другие точки монтирования под ними.

Вы можете найти источник программ для поискакоторые делают это правильно, например, "df" поможет вам сделать это правильно, или если вашей программе не нужно часто искать эту информацию, вы можете просто вызвать popen (3) для команды df, чтобы сделать это для вас.,Например, команда: df /media/my-volume/some/path делает хорошую работу, отображая как имя устройства хранения, так и точку монтирования, где смонтировано это устройство.

...