linux中的link,unlink,open,close

每一个文件都有一个struct stat的结构体来获得文件信息,其中成员st_nlink代表文件的链接数。
当创建一个文件时,文件的链接数为1。

通常open()一个已经存在的文件不会影响文件的链接数。open的作用只是使调用进程与文件之间建立一种访问关系,即open之后返回fd,调用进程可以通过fd来read、write、ftruncate等一系列对文件的操作。

close() 就是消除这种调用进程与文件之间的访问关系。也不会影响文件的链接数。在调用close时,内核会检查打开该文件的进程数,如果此数为0,进一步检查文件的链接数,如果这个数也为0,那么久删除文件内容。

link()创建一个新目录项,并且增加一个链接数。

unlink()函数删除目录项,并且减少一个链接数。如果链接数达到0并且没有任何进程打开该文件,该文件内容才被真正删除。如果unlink之前没有close,那么依旧可以访问文件内容。

综上,真正影响链接数的操作是link、unlink和open的创建。删除文件内容的真正含义是文件的链接数0,而这个操作的本质使用unlink来完成。close能够实施删除文件内容的操作,必定因为在close之前有一个unlink操作。

参考资料:Linux中的link,unlink,close,fclose详解

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值