我需要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,它跟踪已挂载的文件系统。