fopen后检测文件删除

Fre*_*tor 4 c fopen

我正在使用代码检测文件中的更改(日志文件),然后在fseek和ftell的帮助下处理更改.但如果文件被删除并更改(使用logrotate),程序将停止但不会死亡,因为它不会检测到更多更改(即使重新创建文件).fseek不显示错误和eiter ftell.我怎么能检测到该文件删除?也许是一种用其他FILE*var重新打开文件并比较文件描述符的方法.但我怎么能这样做.?

Hel*_*hne 5

文件被删除后,不一定会从磁盘中删除.在您的情况下,程序仍然具有旧文件的句柄.旧文件句柄不会向您提供有关删除或替换其他文件的任何信息.

检测文件删除和重新创建的简单方法是使用stat(2)和fstat(2).它们为您提供了一个struct stat,其中包含该文件的inode.当文件被重新创建(并且仍然打开)时,文件(旧的打开和重新创建)是不同的,因此inode是不同的.inode字段是st_ino.是的,除非您希望使用像inotify这样的Linux功能,否则需要对此进行轮询.