Linux函数获取挂载点

时间:2012-02-14 16:47:43

标签: c linux mount libc

标准Linux库中是否有一个函数(或接口; ioctl,netlink等),它将直接从内核返回当前挂载而不解析/ proc? strace mount命令,它看起来像是解析/ proc

中的文件

2 个答案:

答案 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致电。

这是一个商定的协议,mountunmount 命令维护文件/ etc / mtab中当前挂载的文件系统列表。这些命令的几乎所有linux / unix / bsd手册页都详细介绍了这一点。因此,如果您没有/proc,则可以排序依赖此文件的内容。它不能保证是真理的来源,但惯例是这些事情的惯例。

因此,如果您没有/proc,则可以在下面的/etc/mtab libc库调用中使用getmntent来获取文件系统列表;否则你可以使用/proc/mounts/proc/self/mountinfo之一(现在推荐/proc/mounts以上)。

答案 1 :(得分:2)

没有系统调用列出此信息;相反,您可以在文件/etc/mtab

中找到它