【发布时间】:2016-02-16 22:43:57
【问题描述】:
在 Linux 上使用在 mono 上运行的 C#,请注意以下代码在 windows 上运行良好,可以跨进程锁定文件,但在 linux 上不能通过 mono (ubuntu 14.04)
new FileStream("myfile.lock",FileMode.OpenOrCreate,FileAccess.ReadWrite,FileShare.None);
从网上研究,我应该可以用advisory lock做到这一点
FileStream.Lock
但是,它不起作用。在 ubuntu 14.04 上用两个进程测试,它们都可以执行“FileStream.Lock(0, int.MaxValue)”。我希望后一个会因source code 的异常而失败。
有人知道有什么解决办法吗?
【问题讨论】:
-
当你说它不起作用时,你的意思是什么(?),因为任何其他进程都可以更新文件(假设它具有安全访问权限)。仅供参考:
FileStream.Lock(通过 Mono)使用fcntl的F_SETLK -
@SushiHangover,我更新了我的问题以获取有关“不起作用”的更多详细信息。我测试了两个进程,他们都尝试执行“FileStream.Lock”,我期待其中一个应该抛出错误,但没有。