Linux获取挂载点的函数

发布于 2025-01-05 10:21:32 字数 110 浏览 1 评论 0 原文

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

Is there a function (or interface; ioctl, netlink etc) in the standard Linux libs that will return the current mounts directly from the kernel without parsing /proc? straceing the mount command, it looks like it parses files in /proc

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

§普罗旺斯的薰衣草 2025-01-12 10:21:32

请参阅答案底部的说明,了解此答案中使用的推理。

您是否有任何理由不使用 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 之外没有工具可用于从 Linux 内核获取已挂载文件系统的完全限定列表。没有系统调用,没有ioctl。 /proc 接口是约定的接口。

话虽如此,如果您没有安装 /proc,则必须解析 /etc/mtab 文件 - 传入 /etc/mtab< /code> 而不是 /proc/mounts 进行初始 setmntent 调用。

这是一个商定的协议,mountunmount 命令将在文件 /etc/ 中维护当前已挂载的文件系统的列表。 mtab。几乎所有 linux/unix/bsd 这些命令的手册页。因此,如果您没有 /proc,您可以某种程度上依赖此文件的内容。不能保证它是事实的来源,但约定就是这些事情的约定。

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

Please see the clarification at the bottom of the answer for the reasoning being used in this answer.

Is there any reason that you would not use the getmntent libc library call? I do realize that it's not the same as an 'all in one' system call, but it should allow you to get the relevant information.

#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);
}

Clarification

Considering that the OP clarified about trying to do this without having /proc mounted, I'm going to clarify:

There is no facility outside of /proc for getting the fully qualified list of mounted file systems from the linux kernel. There is no system call, there is no ioctl. The /proc interface is the agreed upon interface.

With that said, if you don't have /proc mounted, you will have to parse the /etc/mtab file - pass in /etc/mtab instead of /proc/mounts to the initial setmntent call.

It is an agreed upon protocol that the mount and unmount commands will maintain a list of currently mounted filesystems in the file /etc/mtab. This is detailed in almost all linux/unix/bsd manual pages for these commands. So if you don't have /proc you can sort of rely on the contents of this file. It's not guaranteed to be a source of truth, but conventions are conventions for these things.

So, if you don't have /proc, you would use /etc/mtab in the getmntent libc library call below to get the list of file systems; otherwise you could use one of /proc/mounts or /proc/self/mountinfo (which is recommended nowadays over /proc/mounts).

帥小哥 2025-01-12 10:21:32

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

There is no syscall to list this information; instead, you can find it in the file /etc/mtab

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文