2010-04-21 77 views
0

这不是一个直接编码问题,而是更多的操作系统处理机制。我正在读一些关于C#和文件处理的问题。显然,C#在试图访问文件时抛出了一个关于文件被锁定的异常。所以我的问题是,C#使用内部锁来处理进程之间的文件I/O,还是OS使用某种类型的文件I/O互斥?文件I/O操作系统处理

从我对操作系统的了解,以及至少unix,是操作系统没有实现任何类型的互斥排除试图访问同一个文件的进程。

回答

1

当你打开一个文件,你可以通知操作系统要如何共享访问文件。你可以说“让别人而我把它打开,读取该文件,但不写它”或“允许他人读取和写入文件,而我把它开了”,甚至“没有允许任何人以不办当我打开它时,这个文件的任何内容“。

通常情况下,当你打开一个文件进行读取,您指定的“不允许任何人写(或删除)文件”,因为这会导致你在读取数据的损坏。

Linux确实实现了文件锁定,但并不是强制性的,据我所知(即程序可以忽略锁定并打开文件)。在Windows上,锁由内核管理,不能被应用程序绕过。

0

不同的系统有不同的方法。 Unix拥有创建咨询锁的群体系统调用,但程序可能会忽略它的危险。查看flock(2)手册页。

此外,维基百科页面file locking有一个相当不错的概述;它真的可以被视为一个完整的回答了这个问题: