有没有办法打开具有非共享独占读写访问权限的文件?
来自fs.watch
的文件更改事件并不一定意味着该文件已被完全写入。在大多数基于节点的进程的情况下,更多的块正在流中,或者它可能还没有被刷新
fs.open
允许在写入模式下打开并正在流式传输的文件,而不会出现错误。人们可能会引入超时延迟,但这太过于脆弱和随意。
在Windows上,人们可以用C CreateFile
进行FILE_SHARE_NONE
,无法回想起Linux上的等效内容(如果我没记错的话,锁就是建议),不知道OS X是否具有等效,posix或其他方式。
答案 0 :(得分:3)
如果任何应用程序具有打开的句柄或文件描述符,您可以使用@ronomon/opened检查文件是否在另一个进程中打开。
它不会告诉您哪些应用程序打开了文件,只是该文件在其他应用程序中打开。
它适用于Windows,macOS和Linux,并且只需要Linux上的权限。
它使用Windows上的本机绑定以独占共享模式打开文件,以检测由于具有打开句柄的其他进程导致的任何共享冲突。
在macOS和Linux上它包装lsof
。
与使用flock
之类的替代方法相比,据我所知,flock
只是建议性的,所以它只有在所有进程合作检查锁定时才有效,但事实并非如此大多数情况下,如果这些过程是独立的。
答案 1 :(得分:1)