我需要注意在基于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
}
答案 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微秒)。