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


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

 

程序內讀取/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
 

示例程序:

#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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM