3

我试图在我的程序中使用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用来检查挂载点时,没有显示任何内容。我发现相关设备尚未安装。发生了什么?真的挂载成功了吗?如何df在 Linux 中通过命令显示挂载的设备?

4

1 回答 1

3

问题在于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


另请参阅此问题

于 2015-09-30T12:39:34.693 回答