linux中的link,unlink,open,close

来源:互联网 发布:java并发框架支持锁 编辑:程序博客网 时间:2024/06/04 00:24

每一个文件都有一个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详解

0 0
原创粉丝点击