在Linux下挂载系统调用不能通过df命令显示文件系统的挂载点

我想在我的程序中使用mount()而不是mount命令,我成功地使用了下面的mount() ,结果返回成功而不是Invalid Argument

 int rc = mount("172.16.74.20:/data/redun/snmp","/mnt/data/redun/snmp", "nfs",0,"soft,timeo=2,addr=172.16.74.20"); if (rc != 0) { printf("mount failed, errCode=%d, reason=%s\n",errno, strerror(errno)); } 

但是当我使用df -h来检查挂载点时,没有任何显示。 我发现相关设备尚未安装。 发生了什么? 它真的挂载成功吗? 如何在Linux中使用df命令显示挂载的设备?

问题是,与mount命令不同, mount()系统调用不更新/etc/mtab文件,而df命令则解析/etc/mtab以列出安装点。

但是,挂载点的最新列表始终可用于/proc/mounts文件中。 与/etc/mtab不同, /proc/mounts不是一个普通的文件,而是一个由内核提供的虚拟文件。


在一些发行版中, /etc/mtab/proc/mounts一个符号链接。 如果不是,并且您想要df工作,您可以执行以下操作:

 cat /proc/mounts > /etc/mtab 

每次mount()或者umount()调用之后。

你也可以使/etc/mtab成为/proc/mounts或者更好的/proc/self/mounts的符号链接,但是你自己承担风险(也许有些应用程序依赖于它,但也许这只是你的发行版中的一个bug)。


另见这个问题 。