标准Linux库中是否有一个函数(或接口; ioctl,netlink等),它将直接从内核返回当前挂载而不解析/ proc? strace
mount命令,它看起来像是解析/ proc
答案 0 :(得分:36)
请参阅答案底部的澄清说明,以了解本回答中使用的原因。
是否有任何理由不使用getmntent
libc库调用?我确实意识到它与“一体化”系统调用不同,但它应该允许您获取相关信息。
#include <stdio.h>
#include <stdlib.h>
#include <mntent.h>
int main(void)
{
struct mntent *ent;
FILE *aFile;
aFile = setmntent("/proc/mounts", "r");
if (aFile == NULL) {
perror("setmntent");
exit(1);
}
while (NULL != (ent = getmntent(aFile))) {
printf("%s %s\n", ent->mnt_fsname, ent->mnt_dir);
}
endmntent(aFile);
}
考虑到OP澄清了试图在没有安装/proc
的情况下执行此操作,我将澄清:
/proc
之外的 no 工具用于从linux内核获取已安装文件系统的完全限定列表。没有系统调用,没有ioctl。/proc
接口是商定的接口。
话虽如此,如果您没有安装/proc
,则必须解析/etc/mtab
文件 - 将/etc/mtab
而不是/proc/mounts
传递给初始版本setmntent
致电。
这是一个商定的协议,mount
和unmount
命令将维护文件/ etc / mtab中当前挂载的文件系统列表。这些命令的几乎所有linux / unix / bsd手册页都详细介绍了这一点。因此,如果您没有/proc
,则可以排序依赖此文件的内容。它不能保证是真理的来源,但惯例是这些事情的惯例。
因此,如果您没有/proc
,则可以在下面的/etc/mtab
libc库调用中使用getmntent
来获取文件系统列表;否则你可以使用/proc/mounts
或/proc/self/mountinfo
之一(现在推荐/proc/mounts
以上)。
答案 1 :(得分:2)
没有系统调用列出此信息;相反,您可以在文件/etc/mtab