2012-02-14 10 views
13

Esiste una funzione (o un'interfaccia, ioctl, netlink ecc.) Nelle librerie Linux standard che restituiranno i montaggi correnti direttamente dal kernel senza analizzare/proc? strace il comando mount, sembra che analizzi i file in/procFunzione Linux per ottenere punti di montaggio

+0

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

+1

@Satish che monta un filesystem- non restituisce mounts_ _current – tMC

+4

Perché si vuole evitare '/ proc /'? ? sotto Linux, è il modo preferito per recuperare tali informazioni! Ed è anche molto semplice !! –

risposta

2

Non ci sono syscall per elencare queste informazioni; invece, è possibile trovarlo nel file /etc/mtab

+0

mtab è solo un collegamento simbolico a/proc/monta sulla maggior parte dei sistemi. – tMC

+0

link simbolico o hard link? Ricordo che ai vecchi tempi mtab non era affidabile ... –

+0

@tMC: '/ proc/mounts' è un dettaglio di implementazione. '/ etc/mtab' è un file standard che troverai su quasi tutti i sistemi di tipo Unix. Non ho controllato, ma penso che sia parte dello standard. Quindi puoi fare affidamento su di esso. E non direi "sulla maggior parte dei sistemi". Nei miei sistemi Ubuntu e OpenSuSE, è un file semplice. Ho '/ proc/mounts', ma è un collegamento :-) –

32

C'è qualche ragione per cui non si utilizzerebbe la chiamata alla libreria libc getmntent? Mi rendo conto che non è la stessa cosa di una chiamata di sistema "tutto in uno", ma dovrebbe consentire di ottenere le informazioni rilevanti.

#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

Ho un sistema incorporato che potrebbe aver fatto uso di queste informazioni durante l'avvio; prima/proc è stato montato. – tMC

+1

Sia 'df' che' mount' usano '/ proc/self/mountinfo' invece di'/proc/mounts', ma il risultato è lo stesso. –

+1

Ricorda che 'getmntent' non è thread-safe. C'è 'getmntent_r' (estensione GNU). –