我如何获得已安装文件系统的列表

我需要parsing所挂载的文件系统的表,而不使用/ proc / mounts,因为我parsing它以确定proc文件系统的安装位置。 我该怎么做?

我GOOGLE了,但所有的答案是使用/ proc

为什么人们确信procfs被挂载到默认的地方?


我出于好奇而问。 我知道/ proc是一个标准的事实,许多工具使用它,所以/ proc锚定相当不错。

Linux API与文件系统path是一致的,所有真正需要的信息都通过环境variables传递,使得可以改变库和可执行文件,configuration文件等等。

我很PROC_PATH是否有可能检测PROC_PATH没有事先知道呢? 我可以用statvfs做callback函数,但是这太不重要了。 肯定应该是更直的方法。

那么df -k怎么样? 谷歌也导致我也这样 。

在Mac上你有diskutil list

如果你想弄清楚你需要在c代码中执行什么系统调用,可以使用strace来查找它。


假设您有权访问/ root目录,使用Petesh 代码和llolydm 代码 :

 #include <stdlib.h> #include <mntent.h> #include <unistd.h> #include <sys/types.h> #include <dirent.h> #include <stdio.h> void listdir(const char *name, int level) { DIR *dir; struct dirent *entry; struct mntent *ent; FILE *aFile; if (!(dir = opendir(name))) return; if (!(entry = readdir(dir))) return; do { if (entry->d_type == DT_DIR) { char path[1024]; int len = snprintf(path, sizeof(path)-1, "%s/%s", name, entry->d_name); path[len] = 0; if (strcmp(entry->d_name, ".") == 0 || strcmp(entry->d_name, "..") == 0) continue; printf("%*s[%s]\n", level*2, "", entry->d_name); listdir(path, level + 1); } else { printf("%*s- %s\n", level*2, "", entry->d_name); aFile = setmntent(entry); while (NULL != (ent = getmntent(aFile))) { printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir); } endmntent(aFile); } } while (entry = readdir(dir)); closedir(dir); } int main(void) { listdir("/", 0); return 0; } 

查看/ etc / mtab,它跟踪已挂载的文件系统。