【发布时间】:2018-02-08 18:14:05
【问题描述】:
我在 Windows 中看到一些关于文件句柄的令人惊讶的行为。
我有两个进程都试图获取同一个底层文件的只读文件句柄。
进程 A(Go 二进制文件)打开该文件的只读文件句柄,然后使用它来获取文件的排他锁。
进程 B(一个 Python 二进制文件)然后尝试在 same 文件上打开一个只读文件句柄,这会导致以下 IOError:
IOError: [Errno 13] Permission denied: 'C:\\path\\to\\file.txt'
当进程 A 不在时,进程 B 打开文件没有问题。
据我所知,Windows 上的两个进程都持有同一个文件的只读文件描述符没有问题,而且我还没有找到任何文档表明其中一个持有独占锁的进程会更改.
有谁知道导致 Python open() 调用失败的原因是什么?
(如果有帮助,我使用的 Go 文件锁定实现是 this one。)
【问题讨论】:
-
你甚至说进程 A 用它来创建一个独占锁。
-
我认为我的困惑源于这样一个事实,即在 Unix 系统上,打开和锁定文件是完全正交的概念。进程 B 可以打开一个由进程 A 独占锁定的文件。根据 tocode 的回答(我现在已经接受),在 Windows 上似乎不是这种情况。
标签: python windows file-locking