Пожалуйста, смотрите пояснение внизу ответа для обоснования, используемого в этом ответе.
Есть ли какая-либо причина, по которой вы бы не использовали библиотечный вызов 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
).