【发布时间】:2010-07-08 09:41:29
【问题描述】:
免责声明:我主要是 linux/web 开发人员。
Windows 有这个“不错”的功能,它拒绝删除任何进程保持打开的任何文件的权限。因此,如果防病毒软件在错误的时间点击了错误的文件,某些随机程序可能会出现异常行为并可能崩溃。
我说的对吗?有解决此问题的计划吗?
你们中是否有人认为这是可以接受的,或者,当时这怎么可能是个好主意?
编辑:
它在 Unix 上的工作方式非常不同,几十年来一直如此。
举个例子:
- 进程 1 打开 foo.txt,读取或写入,或两者兼而有之,没关系
- 进程 2 删除文件
- 文件与文件系统取消链接
- 进程 1 继续读取和/或写入,文件仍然存在,只要磁盘上有空间,它就可以增长。它只是无法从其他还没有文件句柄的进程访问。
- 当进程 1 关闭文件时,将无法从任何地方访问它
实际上,Unix 上临时文件的常见使用模式是:open-remove-read/write-close。
【问题讨论】:
-
与删除另一个进程使用而没有警告的文件相反,这绝对不会导致该程序行为不端并可能崩溃。有像解锁器这样的程序可以让你关闭文件句柄,但我看不出删除正在使用的文件是个好主意。
-
但是,如果有人删除了进程 1 正在使用的文件,进程 1 怎么会出现异常或崩溃?该文件仍然存在,可以读取或写入,如果您还没有打开文件句柄,则它不可用。
-
这只是两个平台不同的众多哲学决策之一。两种方法都有其优点和缺点,尽管我个人认为这两种方法都没有比另一种更好或更差。当你为一个平台开发时,你需要了解它的特性并适当地处理它们。如果你没有这样做并且你的程序崩溃了,那么你的程序有问题,而不是平台。
-
我的简单回答——在一个由 Windows 主导的世界里,让文件被打开的进程锁定是一件好事!非常理智和理性,请为我锁定更多东西!但是,在一个由 Linux/Unix/跨平台 Java/etc 主导的世界中,由于黑客和变通方法,我们不得不不情愿地瞄准“平台 X”上看似随机的进程锁定文件是纯粹的疯狂精神错乱和随之而来的头发拉扯。记下我的话:就像他们在 HTML5 中的 canvas 标签上投降一样,他们将不得不在某一天投入一些 API 来禁用进程中的这种行为。我可以做梦
-
看来,截至 2019 年 10 月,这种行为已经改变。 stackoverflow.com/questions/60424732/…
标签: windows