【Linux】程序內獲取文件系統掛載信息

Linux shell可經過查看/etc/mtab或者/proc/mounts文件來獲取當前文件系統掛載信息,示例:shell

 

程序內讀取/etc/mtab或者/proc/mounts,解析字符串較爲繁瑣,可使用mntent提供的方便函數:服務器

FILE *setmntent(const char *filename, const char *type);
struct mntent *getmntent(FILE *filep);
int endmntent(FILE *filep);
 
(1)setmntent用來打開/etc/mtab或者一樣格式的table文件
        參數 filename爲table文件的路徑(例如/etc/mtab),參數type爲打開文件的模式(與open類型,例如「r」爲只讀打開)
        成功時,返回FILE指針(用於mntent操做),失敗時返回NULL
 
(2)getmntent用來讀取文件的每一行,解析每一行的參數到mntent結構,mntent結構的存儲空間是靜態分配的(不須要free),結構的值會在下一次getmntent時被覆蓋
         mntent結構定義: 
struct mntent
  {
    char *mnt_fsname;           /* 文件系統對應的設備路徑或者服務器地址  */
    char *mnt_dir;              /* 文件系統掛載到的系統路徑 */
    char *mnt_type;             /* 文件系統類型: ufs, nfs, 等  */
    char *mnt_opts;             /* 文件系統掛載參數,以逗號分隔  */
    int mnt_freq;               /* 文件系統備份頻率(以天爲單位)  */
    int mnt_passno;             /* 開機fsck的順序,若是爲0,不會進行check */
  }; 
  參數filep是setmntent返回的FILE指針
  成功時返回指向mntent的指針,錯誤時返回NULL
 
(3)endmntent用來關閉打開的table文件,老是返回1
 

示例程序:ide

#include <stdio.h>
#include <mntent.h>
#include <errno.h>
#include <string.h>

int main(void)
{
        char *filename = "/proc/mounts";
        FILE *mntfile;  
        struct mntent *mntent;
   
        mntfile = setmntent(filename, "r");
        if (!mntfile) {
                printf("Failed to read mtab file, error [%s]\n",
                                strerror(errno));
                return -1;
        }  

        while(mntent = getmntent(mntfile))
                printf("%s, %s, %s, %s\n",
                                mntent->mnt_dir,
                                mntent->mnt_fsname,
                                mntent->mnt_type,
                                mntent->mnt_opts);

   
        endmntent(mntfile);
        return 0;
}
View Code
相關文章
相關標籤/搜索