获取挂载点的Linux函数

     2023-03-14     229

关键词:

【中文标题】获取挂载点的Linux函数【英文标题】:Linux function to get mount points 【发布时间】:2012-03-06 01:11:19 【问题描述】:

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

【问题讨论】:

***.com/questions/5095976/mount-system-call @Satish 挂载文件系统 - 它不返回 当前挂载 为什么要避开/proc/ ??在linux下,这是检索此类信息的首选方式!而且也很简单!! 【参考方案1】:

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

您是否有任何理由不使用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 而不是 /proc/mounts 传递给初始的 setmntent 调用。

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

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

【讨论】:

我有一个嵌入式系统,可以在启动过程中使用此信息;在挂载 /proc 之前。 dfmount 都使用/proc/self/mountinfo 而不是/proc/mounts,但结果是一样的。 请记住,getmntent 不是线程安全的。有getmntent_r(GNU 扩展)。 是的,非常清楚 *ent 调用的整个 API 集群的所有限制。现在首选从每个进程的 mountinfo 文件中读取。【参考方案2】:

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

中找到它

【讨论】:

mtab 只是大多数系统上 /proc/mounts 的符号链接。 @tMC: /proc/mounts 是一个实现细节。 /etc/mtab 是一个标准文件,您几乎可以在任何类 Unix 系统上找到它。我没有检查,但我认为这是标准的一部分。所以你可以依靠它。而且我不会说“在大多数系统上”。在我的 Ubuntu 和 OpenSuSE 系统中,它是一个纯文件。我确实有/proc/mounts,但它是一个链接:-) 我可以确认 /etc/mtab 不是文件,而是 Raspbian Jessie 上的 /proc/mounts 的链接。

通过 /proc/mounts 监控挂载点的变化

】通过/proc/mounts监控挂载点的变化【英文标题】:Monitoringmountpointchangesvia/proc/mounts【发布时间】:2011-07-0113:04:53【问题描述】:根据proc手册,可以通过打开“/proc/mounts”,在select()调用中添加要读取fd_set的文件描述符来监控linux... 查看详情

如何将挂载点的卷 GUID 转换为实际路径?

...时间】:2015-04-2022:12:42【问题描述】:我正在使用此代码获取Path、VolumeLabel、TotalSize、FreeSpace:gwmi-ComputerName$ComputerName-namespaceroot\\MSClusterMSCluste 查看详情

检测 linux 上的绑定挂载

】检测linux上的绑定挂载【英文标题】:detectingbindmountsonlinux【发布时间】:2012-01-0310:58:16【问题描述】:我正在寻找一种方法来确定给定路径是否是绑定挂载点(在linux上)。检测常规挂载点的标准技术似乎不起作用。甚至mountp... 查看详情

linux0.11根文件系统挂载(代码片段)

...二)Linux0.11缺页处理(三)Linux0.11根文件系统挂载(四)Linux0.11文件打开open函数(五)Linux0.11execve函数(六)文章目录系列文章目录一、起源二、系统调用三、sys_setup之一函数读入超级块信息1... 查看详情

linux挂载命令

...在linux当中所有的存储设备如u盘、光盘、硬盘等,都必须挂载之后才能正常使用。其实挂载可以理解为windows当中的分配盘符,只不过windows当中是以英文字母ABCD等作为盘符,而linux是拿系统目录作为盘符,当然linux当中也不叫盘... 查看详情

同一挂载点的 Icecast 不同登录

】同一挂载点的Icecast不同登录【英文标题】:Icecastdifferentloginsforsamemountpoint【发布时间】:2015-06-1312:20:30【问题描述】:您好***用户,我有一个带有几个挂载点的icecast2服务器。现在我有一个供客人使用的挂载点。但是每个客人... 查看详情

linux如何自动挂载分区?

参考技术A以sdb1为例,首先使用lsblk命令可以清晰的获取全局的块设备布局。2然后,使用blkid命令可以获取设备的UUID。复制记下sdb1的UUID。3vi编辑/etc/fstab文件系统信息。4在最后加上一行。然后:wq保存退出。5重启后,df -h可以... 查看详情

来自不同挂载点的相同值

】来自不同挂载点的相同值【英文标题】:Identicalvaluesfromdifferentmountpoints【发布时间】:2020-09-2912:17:42【问题描述】:请帮帮我!我有虚拟机。服务器Ubuntu18.04并在docker下安装node-exporterprometheus。在服务器上,我有几个磁盘。但... 查看详情

linux进程隐藏hookreaddir函数挂载覆盖/proc/pid目(代码片段)

文章目录前言一、应用层下hook函数调用实现隐藏二、挂载覆盖/proc/pid目录三、总结前言上篇介绍了如何在有源码的情况下,通过argv[]及prctl对进程名及参数进行修改,整篇围绕/proc/pid/目录和ps、top命令进行分析,做到... 查看详情

获取在“magrittr”管道调用的函数中计算为点的表达式

】获取在“magrittr”管道调用的函数中计算为点的表达式【英文标题】:Getexpressionthatevaluatedtodotinfunctioncalledby`magrittr`pipe【发布时间】:2019-02-0313:45:03【问题描述】:我有一个函数x_expression(),它打印传递给参数x的表达式。pacman:... 查看详情

带有一个挂载点的 Docker 多 postgres 容器

】带有一个挂载点的Docker多postgres容器【英文标题】:Dockermultipostgrescontainerswithonemountpoint【发布时间】:2021-04-0805:08:56【问题描述】:我有两个Postgres数据库,我想在主题之间同步数据。到目前为止,我有这两个容器,完全相同... 查看详情

linux硬盘掉线挂载信息还在

磁盘挂载与卸载磁盘分区完之后需要格式化,格式化之后需要挂载磁盘。格式化后的磁盘恰是是一个块设备文件,类型为b。在挂载某个分区前需要先建立一个挂载点,这个挂载点是以目录的形式出现的。一旦把某个分区挂载到... 查看详情

使用 awk 和 grep 获取挂载点

】使用awk和grep获取挂载点【英文标题】:GettingMountPointsusingawk&grep【发布时间】:2021-09-2908:17:37【问题描述】:我正在尝试在linux上获取挂载点及其各自的路径。所以当我运行mount-v命令时,我得到了这个示例输出//cifst/FSRon/mnt/... 查看详情

linux怎么挂载exfat格式分区

参考技术A你查一下man函数手册:manmount,好好看看它的使用说明。应该这样就可以。mount-texfat-oiocharset=cp936/dev/sda2/mnt/d本回答被提问者和网友采纳 查看详情

linux中将磁盘挂载为存储目录

1,大致步骤如下:mkfs.ext4/dev/sdb1//首先格式化磁盘(实际是文件系统)mkdir-p/gluster/ssd///创建目录,准备挂载blkid/dev/sdb1//获取磁盘UUIDvim/etc/fstab//将UUID写入文件i键写,使磁盘开机自动挂载UUID=“xxxxxxxxxxx 查看详情

linux挂载光驱命令mount/mnt/cdrom是啥意思?

linux挂载光驱命令mount/mnt/cdrom是什么意思?挂载命令不应该是mount-t类型-o挂接方式源路径目标吗?这个mount是挂载命令mount命令详解功能:加载指定的文件系统。语法:mount[-afFhnrvVw][-L<标签>][-o<选项>][-t<文件系统类型>... 查看详情

vue js 2:在挂载函数中访问道具

...有数据道具。在挂载函数的子组件内部,我需要从道具中获取特定值并设置选择下拉值。我正在使用运行良好的vue-multiselect插件。这是代码。module.exports=props:["Subscriptions"]mounted:func 查看详情

posix线程取消点的linux实现

...的多线程死锁小例子出发来说明Linux系统对POSIX线程取消点的实现方式,以及如何避免因此产生的线程死锁。目录:1.一个pthread_cancel引起的线程死锁小例子2.取消点(CancellationPoint)3.取消类型(CancellationType)4.Linu 查看详情