Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 比较文件统计时间_C++_File_Time T_Time.h - Fatal编程技术网

C++ 比较文件统计时间

C++ 比较文件统计时间,c++,file,time-t,time.h,C++,File,Time T,Time.h,我需要注意在基于Unix的系统上修改文件,而我没有访问Boost的权限。我想知道下面的逻辑是否正确。我认为这可能效率低下,而且我知道在while循环中根本不睡觉是在浪费大量的周期,但我无法估计文件在修改之间需要多长时间,我需要相对快速地知道: std::time_t getTimeLastModified(const char* filename){ struct stat fileattrib; stat(filename, &fileattrib); re

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

检查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);
另外要考虑的是是否超时。也就是说,你是做什么的
如果文件从未更改,比如10分钟(或600000000微秒)。

如果内核中有inotify,为什么不使用它呢?inotify在我正在使用的生产系统中不可用。我无法在此系统上重新编译内核,并且在系统上也没有root访问权限。
const unsigned long polltime = 5000;    // 5ms
usleep(polltime);