如何使Windows文件锁定更像UNIX文件锁定?

UNIX文件锁定是非常容易的:操作系统假定您知道您正在做什么,并让您执行所需:

例如,如果您尝试删除一个进程已打开的文件,则操作系统通常会让您执行此操作。原始进程仍然保持它的文件句柄,直到它终止 – 在这一点上,文件系统将安静地重新循环磁盘资源。不要紧,这就是我喜欢的方式。

在Windows上有什么不同的东西:如果我尝试删除一个进程使用的文件,我得到一个操作系统错误。该文件是不可触摸的,直到原始进程释放它在文件上的锁定。在MS-DOS的单用户日子里,当任何锁定进程可能位于包含文件的同一台计算机上时,这是非常好的,但是在网络上这是一场噩梦:

考虑在Windows文件服务器上写入共享文件时进程挂起时会发生什么。在文件可以删除之前,我们必须找到计算机和ID,该计算机上最初打开该文件的进程。只有这样,我们才能杀死进程并删除我们不需要的文件

真讨厌!

有没有办法使这更好?我想要的是在Windows上的文件锁定在UNIX中表现为类似的文件锁定。我想要操作系统让我做我想要的,因为我负责,我知道我在做什么…

那么可以做到吗

根据MSDN可以指定CreateFile()第三个参数(dwSharedMode)共享模式标志FILE_SHARE_DELETE哪个:

Enables subsequent open operations on a file or device to request delete access.

Otherwise,other processes cannot open the file or device if they request delete access.

If this flag is not specified,but the file or device has been opened for delete access,the function fails.

Note Delete access allows both delete and rename operations.

http://msdn.microsoft.com/en-us/library/aa363858(VS.85).aspx

所以如果你可以控制你的应用程序,你可以使用这个标志。

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...