2015-09-28 53 views
3

我试图用mount()而不是mount命令在我的程序中,我成功地使用了以下mount(),结果返回成功而不是Invalid Argument在Linux下挂载系统调用不能显示文件系统的挂载点通过df命令

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命令显示挂载的设备?

+0

不'df'读取由'mount'命令更新的'/ etc/mtab',而不是'mount()'syscall?检查你'/ proc/mounts'。 – gavv

+0

是的,我还在/ proc/mounts下找到了挂载点信息。但运行'df -h'后没有任何显示。 –

+0

所以问题在于'/ etc/mtab',而不是关于安装名称空间。我已经发布了更多细节的答案。 – gavv

回答

2

的问题是,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,而是做你自己的风险(也许某些应用程序依赖于它,但也许它只是在你的发行版中的错误)。


另请参阅this question