C fopen后检测文件删除

C fopen后检测文件删除,c,fopen,C,Fopen,我使用的代码检测文件(日志文件)中的更改,然后在fseek和ftell的帮助下处理更改。但是如果文件被删除和更改(使用logrotate),程序将停止但不会消亡,因为它不会检测到更多更改(即使重新创建了文件)。fseek不显示错误和错误。 如何检测文件删除?可能是一种使用其他file*var重新打开文件并比较文件描述符的方法。但是我怎么能做到呢 您可以定期关闭文件并再次打开,这样您将打开新创建的文件。如果文件没有句柄(open file descriptor是一个句柄),则文件实际上会被删除,此

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

您可以定期关闭文件并再次打开,这样您将打开新创建的文件。如果文件没有句柄(open file descriptor是一个句柄),则文件实际上会被删除,此时您仍保留着旧文件。

如果文件被删除,则不一定会从磁盘中删除它。在您的情况下,程序仍然具有旧文件的句柄。旧文件句柄不会为您获取有关删除或替换为其他文件的任何信息


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

在windows上,您可以设置对FS修改的回调。以下是详细信息:

类似于(!filemember)的操作是否对您无效?文件打开一次,然后使用fseek(fp,0,fseek_END)等待其长度的更改;但是,当文件被删除时,这永远不会改变。因此,当第一次打开文件时,我需要做一个统计,在每次迭代中进行更改,检查其他统计,如果索引节点不同,如果是,文件被移动/更改,并做些什么…我不能这样做,因为我经常检查文件的大小,并在预览的最后一个字符和新的最后一个字符(并处理更改)之间不断切换。我忘了告诉你,这个程序是在posix系统中运行的。