检查文件是否在另一个进程中打开

时间:2015-07-01 22:26:55

标签: node.js

有没有办法打开具有非共享独占读写访问权限的文件?

来自fs.watch的文件更改事件并不一定意味着该文件已被完全写入。在大多数基于节点的进程的情况下,更多的块正在流中,或者它可能还没有被刷新

fs.open允许在写入模式下打开并正在流式传输的文件,而不会出现错误。人们可能会引入超时延迟,但这太过于脆弱和随意。

在Windows上,人们可以用C CreateFile进行FILE_SHARE_NONE,无法回想起Linux上的等效内容(如果我没记错的话,锁就是建议),不知道OS X是否具有等效,posix或其他方式。

2 个答案:

答案 0 :(得分:3)

如果任何应用程序具有打开的句柄或文件描述符,您可以使用@ronomon/opened检查文件是否在另一个进程中打开。

它不会告诉您哪些应用程序打开了文件,只是该文件在其他应用程序中打开。

它适用于Windows,macOS和Linux,并且只需要Linux上的权限。

它使用Windows上的本机绑定以独占共享模式打开文件,以检测由于具有打开句柄的其他进程导致的任何共享冲突。

在macOS和Linux上它包装lsof

与使用flock之类的替代方法相比,据我所知,flock只是建议性的,所以它只有在所有进程合作检查锁定时才有效,但事实并非如此大多数情况下,如果这些过程是独立的。

答案 1 :(得分:1)

请参阅flock包中的fs-ext功能。