Linux 程式獲取檔案系統掛載資訊
阿新 • • 發佈:2019-02-15
linux shell可以通過檢視/etc/mtab或者/proc/mounts檔案來獲取當前檔案系統掛載資訊,程式內直接讀取/etc/mtab或者/proc/mounts,解析字串較為繁瑣,可以使用GNU C Library提供的mntent.h中的庫函式
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時被覆蓋。
引數filep是setmntent返回的FILE指標
成功時返回指向mntent的指標,錯誤時返回NULL
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 */
};
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;
}