c/c++语言开发共享fopen后检测文件删除

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

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

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

    您可以定期关闭该文件并再次打开它,这样您将打开新创建的文件。 当文件没有句柄(打开文件描述符是句柄)时,文件实际上会被删除,你仍然持有旧文件。

    在Windows上,您可以设置FS修改的回调。 以下是详细信息: http : //msdn.microsoft.com/en-us/library/aa365261(VS.85).aspx

      以上就是c/c++开发分享fopen后检测文件删除相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/553082.html

      (0)
      上一篇 2021年1月26日
      下一篇 2021年1月26日

      精彩推荐