如何检查文件是否仍在写入?

thk*_*987 10 c++ linux gcc

如何检查文件是否仍在写入?我需要等待一个文件被另一个进程创建,编写和再次关闭,所以我可以继续在我的进程中再次打开它.

bdo*_*lan 5

通常,这是一个难以解决的问题.在某些情况下,您可以询问文件是否已打开 ; 但是,如果其他进程是脚本,则可能会多次打开并关闭该文件.我强烈建议您使用咨询锁或其他显式方法,以便其他进程在完成文件时进行通信.

也就是说,如果这不是一种选择,那就有另一种方式.如果查看/proc/<pid>/fd目录,<pid>某个正在运行的进程的数字进程ID 在哪里,您将看到进程已打开的文件的一堆符号链接.符号链接上的权限反映了文件打开的模式 - 写入权限意味着它是为写入模式打开的.

因此,如果您想知道文件是否打开,只需扫描每个进程的/proc条目及其中的每个文件描述符,寻找文件的可写符号链接.如果您知道其他进程的PID,也可以直接查看其proc条目.

当然,这有一些重大缺点.首先,您只能查看自己进程的打开文件,除非您是root用户.它也相对较慢,只适用于Linux.而且,如果另一个进程多次打开并关闭文件,那么你就会陷入困境 - 你可能最终会在关闭期间看到它,并且没有简单的方法可以知道它是否会再次打开它.

  • 如果某个远程进程通过NFS写入文件,您将看不到它.(除非有一个本地进程执行实际编写,但我认为它是在内核中完成的.) (3认同)