2012-02-14 7 views
13

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

+0

http://stackoverflow.com/questions/5095976/mount-system-call – Satish

+1

@Satish что монтирует filesystem- он не возвращает _current mounts_ – tMC

+4

Почему вы хотите, чтобы избежать '/ Proc /'? ? под Linux это предпочтительный способ получить такую ​​информацию! И это очень просто! –

ответ

2

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

+0

mtab - это просто символическая ссылка на/proc/mounts на большинстве систем. – tMC

+0

символическая ссылка или жесткая ссылка? Я помню, что в старые времена mtab не был надежным ... –

+0

@tMC: '/ proc/mounts' является деталью реализации. '/ etc/mtab' - стандартный файл, который вы найдете почти в любой Unix-подобной системе. Я не проверял, но я думаю, что это часть стандарта. Поэтому вы можете положиться на это. И я бы не сказал «на большинстве систем». В моих системах Ubuntu и OpenSuSE это простой файл. У меня есть '/ proc/mounts', но это ссылка :-) –

32

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

#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); 
} 
+0

У меня есть встроенная система, которая могла бы использовать эту информацию во время загрузки; до/proc. – tMC

+1

И 'df', и' mount' используют '/ proc/self/mountinfo' вместо'/proc/mounts', но результат тот же. –

+1

Имейте в виду, что 'getmntent' не является потокобезопасным. Существует 'getmntent_r' (расширение GNU). –