2

我需要注意在基于 Unix 的系统上对文件的修改,但我无权访问 Boost。我想知道以下逻辑是否合理。我认为它可能效率低下,而且我知道我在 while 循环中根本不睡觉而浪费了大量的周期,但我没有估计文件在修改之间要经过多长时间,我需要知道相对较快:

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
}
4

1 回答 1

3

检查 mod 时间的逻辑大多是合理的。

您只需要错误检查 stat 返回值 - 以防文件丢失。

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() 返回值。

如果您碰巧知道需要多久轮询一次文件修改时间,您可以在 while 循环中调用 usleep(unsinged long usec)。你能做这样的事情吗?

const unsigned long polltime = 5000;    // 5ms
usleep(polltime);

要考虑的另一件事是是否超时。也就是说,如果文件从不改变——比如 10 分钟(或 600000000 微秒),你会怎么做。

于 2014-07-08T18:44:59.770 回答