这不是直接编码问题,而是更多的操作系统处理机制。我正在读一些关于C#和文件处理的先前问题。显然,在尝试访问文件时,C#会因为文件被锁定而引发异常。所以我的问题是,C#是否使用内部锁来处理进程之间的文件I / O,或者操作系统是否对文件I / O使用某种类型的互斥?
根据我对操作系统的了解,至少是unix,操作系统不会为尝试访问同一文件的进程实现任何类型的互斥。
答案 0 :(得分:1)
当您打开文件时,您可以向操作系统发出信号,告知您希望如何共享文件的访问权限。您可以说“允许其他人在我打开它时读取此文件但不写入它”或“允许其他人在打开文件时读取和写入文件”或“甚至不允许任何人这样做”当我把它打开时,这个文件的任何内容“。
通常,当您打开文件进行阅读时,您指定“不允许任何人写入(或删除)文件”,因为这可能会导致您正在阅读的数据损坏。
Linux确实实现了文件锁定,但它并不是必须的,因为我理解它(也就是说,程序可以忽略锁并打开文件)。在Windows上,锁由内核管理,不能被应用程序绕过。
答案 1 :(得分:0)
不同的系统以不同的方式进行。 Unix有flock系统调用,它会创建一个咨询锁,但程序可以忽略它的危险。查看flock(2)手册页。
此外,维基百科file locking页面有一个非常好的概述;它真的可以被认为是这个问题的完整答案: