c++ - 比较文件统计时间

标签 c++ file time-t time.h

我需要在基于 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/

相关文章:

c++ - C/C++ time_t(以微秒为单位)

c++ - vector 值 boost::program_options 的默认值

c++ - 使用 std::move 在开头插入 vector 的中间元素不起作用

android - 为什么无法打开文件错误发生在这一行

c - 在文本文件中查找特定组合

c - 如何从 time_t 中提取小时数?

python - Git:保持同一文件的两个位置同步

c++ - R32I Sampler2D 始终返回 0

list - 将具有可变列数的文本文件读取到列表

c++ - 两个独立的 tm 结构相互镜像