检查文件是否在另一个进程中打开
有没有办法打开一个非共享独占读写访问的文件?
来自fs.watch
文件更改事件并不一定意味着该文件已经被完全写入。在大多数基于节点的进程中,更多的块正在stream下,或者它可能还没有被刷新。
fs.open
允许已打开并正在stream式传输的文件在写入模式下无错误地打开。 可以引入超时延迟,但这太脆弱和任意。
在Windows上,可以使用C语言中的FILE_SHARE_NONE
执行CreateFile
,不能完全记得Linux上的等价物(因为如果我没有记错的话,锁是build议的),不知道OS X是否有等价物,posix或除此以外)。
你可以使用@ ronomon / opened来检查一个文件是否在另一个进程中打开,如果有任何应用程序打开句柄或文件描述符。
它不会告诉你哪些应用程序打开文件,只是该文件在其他应用程序中打开。
它可以在Windows,MacOS和Linux上运行,并且只需要Linux上的权限。
它使用Windows上的本机绑定以独占共享模式打开文件,以检测由于打开句柄的其他进程而导致的共享冲突。
在macOS和Linux上它包装lsof
。
相比于使用诸如flock
的替代品,据我所知, flock
只是咨询,所以只有在所有进程合作检查locking的情况下才能工作,如果进程是独立的,大多数情况并非如此。
请参阅fs-ext
软件包中的flock
函数。