Linux シェルは、/etc/mtab または /proc/mounts ファイルを表示することで、現在のファイル システムのマウント情報を取得できます。次に例を示します。
プログラム内で /etc/mtab または /proc/mounts を読み取ったり、文字列を解析したりするのは面倒ですが、mntent が提供する便利な関数を使用できます。
FILE *setmntent(const char *ファイル名, const char *タイプ);
struct mntent *getmntent(FILE *filep);
int endmntent(FILE *filep);
(1) setmntent は、/etc/mtab または同じ形式のテーブル ファイルを開くために使用されます。Read
成功すると FILE ポインター (mntent 操作用) を返し、失敗すると NULL を返します
(2) getmntent は、読み取りに使用されますファイルの各行を解析し、各行のパラメータを mntent 構造体に解析します。mntent 構造体の記憶領域は静的に割り当てられ (free は必要ありません)、構造体の値は次の getmntent で上書きされます。
mntent 構造定義:
struct mntent
{ char *mnt_fsname; char *mnt_dir; char *mnt_type; char *mnt_opts; int mnt_freq; int mnt_passno; };
パラメータ filep は setmntent によって返される FILE ポインタです。
成功すると mntent へのポインタが返され、失敗すると NULL が返されます。
(3) endmntent は開かれたテーブル ファイルを閉じるために使用され、常に 1 を返します。
サンプルプログラム:
#インクルード
#インクルード
#
インクルード #インクルード
int main(void)
{ char *filename ="/proc/mounts"; ファイル *mntfile; 構造体 mntent *mntent; mntfile = setmntent(ファイル名,"r"); if (!mntfile) { printf("mtab ファイルの読み取りに失敗しました。エラー [%s]\n", strerror(errno)); -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);
0を返します。
}