Linux上进程向文件写入时删除文件写入会失败吗
1、进程P的写入不会失败,磁盘的占用仍然会增加
下面小编从理论和实践方面讲一下

1、写个python文件,终端运行当做一个写入的进程(桌面创建好了test_write.txt)


2、过程中删除test_write.txt文件,查看进程是否异常,结果终端正常输出write it once,另外打开一命令行窗口查看进程如下(正常写入:进程的时间在增加表示没有中断)

3、删除txt文件以后,查看一下磁盘占用是否还在持续增加,结果确实增加了(如图)

1、stackoverflow:
如果文件被移动(在相同的文件系统中)或重命名,则文件句柄保持打开状态,仍可用于读取和写入文件。
如果文件被删除,文件句柄仍然是打开的,仍然可以使用(这不是一些人所期望的)。在最后一个句柄关闭之前,不会真正删除该文件。
如果文件被新文件替换,则具体取决于文件。如果文件的内容被覆盖,文件句柄仍然有效并访问新内容。如果现有文件被取消链接并且使用相同名称创建新文件,或者如果使用新文件移动到现有文件上rename(),则它与删除相同(参见上文) - 也就是说,文件句柄将继续引用该文件的原始版本。
通常,一旦文件打开,文件就会打开,没有人改变目录结构可以改变它 - 它们可以移动,重命名文件,或者在其位置放置其他东西,它只是保持打开状态。
在Unix中,没有删除,unlink()这是有意义的,因为它不一定删除文件 - 只是从目录中删除链接
2、个人简单理解:
可能文件系统实现了path到真实资源的一个映射,open操作占有了真实资源的句柄,删除操作会删除path到真实资源的映射,但原有的句柄还在。等所有的句柄都关闭了,文件系统再做真正的删除。具体还得详细地看文件系统的实现代码了。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:22
阅读量:47
阅读量:37
阅读量:33
阅读量:53