关于umount2函数的MNT_DETACH参数的探究

在manpages中有这么一段介绍:

    

 MNT_DETACH (since Linux 2.4.11)
              Perform a lazy unmount: make the mount point unavailable for new
              accesses, and actually perform the unmount when the mount  point
              ceases to be busy.






        其大意为如果函数执行带有此参数,不会立即执行umount操作,而会等挂载点退出忙碌状态时才会去卸载它。
不过此函数执行会阻止对该挂载点执行新的访问。之前就在访问此挂载点操作也不会强制其退出,而是会等待其自然退出。



       现在我有这样一个文件夹test,在test下有一个test_file文件.然后我在/mnt下创建test_dir,紧接着我会把./test挂载到/mnt/test_dir下。此时我切到/mnt/test_dir下可以看到test_file文件。之后我用open函数打开/mnt/test_dir/test_file成功获取文件描述符,这样我就可以保证挂载点/mnt/test_dir处于忙碌状态。此时用umount   /mnt/test_dir命令会报出忙碌的错误,是无法完成卸载的。而调用带MNT_DETACH的umount2函数就会执行成功,但是根据它的描述,它不会立即执行umount操作。但是此时你去执行  umount /mnt/test_dir命令会提示此目录不是挂载点的错误。






     其描述说挂载点不允许新的访问,但是实际的效果是此时挂载点已经不存在了,因为之前挂载过来的文件系统已经
被卸载掉了,此时/mnt/test_dir已经算不上真正意义上的挂载点了,它只是一个单纯的文件目录。所谓的不允许访问挂载点根本就没有任何意义了,因为挂载点根本就不存在了。而且此时挂载点消失的无影无踪,用
 umount /mnt/test_dir命令测试会报出不是挂载点的错误,我真的怀疑此时已经彻底将文件系统卸载掉了,只是保留了对于源文件目录即./test目录的链接指向罢了。因为我实在是无法去区分了。我觉得在errno.h中access错误码和文件
不存在错误还是不同的,此函数执行后,我去访问/mnt/test_dir目录报出access错误码的话我还是比较能接受的,但是事实并非这样。这个我就有点纠结了,最起码的来说,这个参数功能描述是错误的,往深处来说这个函数的实现是
存在问题的,没有严格按照其功能实现。






         搞了半天的东西是这个结局我实在是有点不太能接受,这个参数功能描述也太具有迷惑性了啊。写出来和大家分享,希望大家以后不要犯同样地错误了。如果有对这方面熟悉或者是对这个系统调用函数的具体实现了解的朋友看到,请求对我进行指导,求指教!!!求进步!!!



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值