比较文件统计时间

时间:2014-07-08 17:47:28

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

我需要注意在基于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
}

1 个答案:

答案 0 :(得分:3)

检查模态时间的逻辑主要是声音。

如果文件丢失,您只需要错误检查统计返回值。

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微秒)。