我需要在基于 Unix 的系统上监视文件的修改,但我无法访问 Boost。我想知道以下逻辑是否合理。我认为这可能效率低下,而且我知道我在 while 循环中根本不 sleep ,浪费了大量的周期,但我没有任何估计文件在修改之间将持续多长时间,我需要知道相对较快:
std::time_t getTimeLastModified(const char* filename){
struct stat fileattrib;
stat(filename, &fileattrib);
return fileattrib.st_mtime;
}
int main(){
std::time_t file1_modified_time = getTimeLastModified(coor_file.c_str());
while(difftime(getTimeLastModified(coor_file.c_str()),file1_modified_time)==0){}
// If program execution gets here, file has been modified
}
最佳答案
检查修改时间的逻辑大部分都是合理的。
您只需要错误检查统计返回值 - 以防文件丢失。
struct stat fileattrib;
int status = stat(filename, &fileattrib); // Get file stats
if (status < 0)
return((std::time_t)-1); // File missing?
return(fileattrib.st_mtime);
这意味着您应该错误检查 getTimeLastModified() 返回 值。
如果您碰巧知道需要多久轮询一次文件 修改时间,你可以在里面调用 usleep(unsinged long usec) 你的 while 循环。你能做这样的事情吗?
const unsigned long polltime = 5000; // 5ms
usleep(polltime);
另一个需要考虑的事情是是否超时。也就是说,你做什么 如果文件从不改变——例如 10 分钟(或 600000000 微秒)。
关于c++ - 比较文件统计时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24638409/