2012-02-14 2 views
13

표준 리눅스 라이브러리에 함수 (또는 인터페이스, ioctl, netlink 등)가있어/proc을 분석하지 않고 커널에서 직접 현재 마운트를 리턴합니까? strace mount 명령을 실행하면/proc의 파일을 구문 분석하는 것처럼 보입니다.리눅스 기능 탑재 지점을 얻으려면

+0

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

+1

@Satish이 _current mounts_ – tMC

+4

을 반환하지 않는 대한 파일 시스템이 왜'/ proc 디렉토리 /'을 피하기 하시겠습니까으로 마운트되는지? ? 리눅스에서는 그러한 정보를 검색하는 것이 선호된다. 그리고 그것은 너무 간단합니다 !! –

답변

2

이 정보를 나열하는 데 사용할 수있는 syscall이 없습니다. 대신 파일에서 찾을 수 있습니다 /etc/mtab

+0

mtab은 대부분의 시스템에서/proc/mounts에 대한 심볼릭 링크입니다. – tMC

+0

심볼릭 링크 또는 하드 링크? 나는 옛날에 mtab이 신뢰할 수 없다는 것을 기억합니다 ... –

+0

@tMC :'/ proc/mounts'는 구현 세부 사항입니다. '/ etc/mtab'은 거의 모든 Unix 계열 시스템에서 찾을 수있는 표준 파일입니다. 나는 체크하지 않았지만 그것이 표준의 일부라고 생각한다. 그래서 당신은 그것에 의지 할 수 있습니다. 그리고 나는 "대부분의 시스템에서"말하지 않을 것입니다. 내 우분투 및 OpenSuSE 시스템에서는 일반 파일입니다. 나는/proc/mounts를 가지고 있지만 링크입니다 :-) –

32

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

부팅하는 동안이 정보를 사용할 수있는 임베디드 시스템이 있습니다./proc가 마운트되기 전에. – tMC

+1

'df'와'mount'는'/ proc/mounts' 대신에'/ proc/self/mountinfo'를 사용합니다, 그러나 결과는 같습니다. –

+1

'getmntent'는 쓰레드에 안전하지 않다는 것을 명심하십시오. 'getmntent_r' (GNU 확장자)가 있습니다. –

관련 문제