【发布时间】:2014-04-10 09:10:33
【问题描述】:
我想到了一个并发问题(在 Solaris 中),如果在读取某人试图删除同一个文件时会发生什么。我对 Solaris/Linux 中的文件存在有疑问。假设我有一个文件 test.txt,我在 vi 编辑器中 打开 它,然后我打开了一个重复的会话并 删除 该文件,但即使在删除该文件之后我能够读取该文件。所以这是我的问题:
我是否需要在阅读时考虑任何锁定机制,所以没有人能够在阅读时删除同一个文件。
显示与 windows 不同的行为的原因是什么(例如在 windows 中,如果文件在某些编辑器中打开,我们无法删除该文件)
- 删除该文件后,如果我没有从 vi 编辑器关闭文件,我如何仍然能够读取该文件。
我问的是一般文件,但是是特定于平台的,即 unix。如果我使用java程序(缓冲区读取器)读取文件并且文件在读取时被删除,会发生什么,缓冲区读取器是否仍然能够读取下一个块的文件?
【问题讨论】:
-
由于 Unix 早于 Windows,我认为更好的问题是“为什么 Windows 工程师未能实现这种行为?”因为 Unix 的行为要好得多...
-
当你打开一个文件进行读取时(比如
vi),它的内容在内存中。同时它可以被删除,所以每当你退出vi它就会从你的视线中消失。但是如果从vi内部保存:w,那么它将被重新创建。 -
您是专门询问vi,还是一般询问文件?至少 linux 上的 vim 在您编辑时不会保持原始文件处于打开状态。
-
我问的是一般文件,但是是特定于平台的。就像我使用 java 程序(缓冲区读取器)读取文件并且文件在读取时被删除,缓冲区读取器是否仍然能够读取下一个块的文件?
标签: linux file unix filesystems