linux给文件加i锁,锁定执行文件:Windows,Linux没有。 为什么?

如果文件中执行的代码应该被锁定或者不是设计决定而MS只是决定锁定,因为它在实践中具有明显的优势:这样你就不需要知道哪个应用程序使用哪个版本的代码。这是Linux默认行为的一个主要问题,大多数人都忽略了这一点。如果更换系统范围的库,你不能轻易知道哪些应用程序使用这些库的代码,大多数时候你能得到的最好的是包管理器知道这些库的一些用户并重新启动它们。但这只适用于一般和熟知的事情,如Postgres及其libs等。更有趣的情况是,如果你针对某些第三方库开发自己的应用程序并且那些被替换,因为大多数情况下包管理器根本不知道你的应用程序。这不仅仅是原生C代码的问题,几乎所有东西都会发生:只需使用带有mod_perl的httpd和使用包管理器安装的一些Perl库,让包管理器因为任何原因更新那些Perl库。它不会重新启动你的httpd,只是因为它不知道依赖项。有很多像这样的例子,只是因为任何文件都可能包含任何运行时在内存中使用的代码,想想Java,Python和所有这些东西。

因此,有一个很好的理由认为默认锁定文件可能是一个不错的选择。 但是,您不需要同意这些原因。

那么MS做了什么? 他们只是创建了一个API,使调用应用程序有机会决定是否应该锁定文件,但他们认为此API的默认值是为第一个调用应用程序提供独占锁。 看一下CreateFile及其dwShareMode参数的API。 这就是为什么你可能无法删除某些应用程序正在使用的文件的原因,它根本不关心你的用例,使用了默认值,因此得到了Windows对文件的独占锁定。

请不要相信人们告诉你一些关于Windows不使用引用计数或不支持硬链接等的东西,这是完全错误的。 几乎所有使用HANDLEs的API都记录了它关于引用计数的行为,你几乎可以在任何关于NTFS的文章中轻松阅读它所支持的硬链接并且总是如此。 从Windows Vista开始,它也支持Symlinks,并且通过提供API来读取给定文件的所有内容,改进了对硬链接的支持。

此外,您可能只想查看用于描述文件的结构,例如: Ext4与NTFS相比,它们有很多共同之处。 两者都使用扩展区的概念,它将数据与文件名等属性分开,而inode几乎只是旧的,但类似概念的另一个名称。 甚至维基百科也在其文章中列出了两种文件系统。

与网络上的其他操作系统相比,Windows中存在大量关于文件锁定的FUD,就像碎片整理一样。 只需阅读维基百科上的一些内容,就可以排除部分FUD。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值