Функция Linux для получения точек монтирования - PullRequest
13 голосов
/ 14 февраля 2012

Есть ли в стандартных библиотеках Linux функция (или интерфейс; ioctl, netlink и т. Д.), Которая будет возвращать текущие монтирования непосредственно из ядра без разбора / proc? strace команда mount выглядит так, как будто она анализирует файлы в / proc

Ответы [ 2 ]

36 голосов
/ 15 февраля 2012

Пожалуйста, смотрите пояснение внизу ответа для обоснования, используемого в этом ответе.

Есть ли какая-либо причина, по которой вы бы не использовали библиотечный вызов getmntent libc?Я понимаю, что это не то же самое, что системный вызов «все в одном», но он должен позволить вам получить соответствующую информацию.

#include <stdio.h>
#include <stdlib.h>
#include <mntent.h>

int main(void)
{
  struct mntent *ent;
  FILE *aFile;

  aFile = setmntent("/proc/mounts", "r");
  if (aFile == NULL) {
    perror("setmntent");
    exit(1);
  }
  while (NULL != (ent = getmntent(aFile))) {
    printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir);
  }
  endmntent(aFile);
}

Уточнение

Учитывая, что ОП уточнило попытке сделать это без с установленным /proc, я собираюсь уточнить:

Существует нет средство за пределами /proc дляполучение полного списка смонтированных файловых систем из ядра Linux.Системного вызова нет, ioctl нет.Интерфейс /proc является согласованным интерфейсом.

С учетом сказанного, если у вас не установлено /proc, вам придется проанализировать файл /etc/mtab - передать в /etc/mtab вместо /proc/mounts на начальный setmntent вызов.

По согласованному протоколу команды mount и unmount будут вести списокв настоящее время смонтированные файловые системы в файле / etc / mtab .Это подробно описано почти на всех linux / unix / bsd справочных страницах для этих команд.Так что если у вас нет /proc, вы можете вроде полагаться на содержимое этого файла.Не гарантируется, что он является источником правды, но условные обозначения - это условные обозначения для этих вещей.

Итак, если у вас нет /proc, вы бы использовали /etc/mtab в вызове библиотеки getmntent libcниже, чтобы получить список файловых систем;в противном случае вы можете использовать один из /proc/mounts или /proc/self/mountinfo (который рекомендуется в настоящее время вместо /proc/mounts).

2 голосов
/ 15 февраля 2012

Нет системного вызова для перечисления этой информации;вместо этого вы можете найти его в файле /etc/mtab

...