Сравнение времени статистики файла
Мне нужно следить за модификацией файла в системе на основе 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 ответ
Логика проверки времени мода в основном правильная.
Вам нужно только проверить ошибку, возвращаемое значение 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().
Если вам случится понять, как часто вам нужно опрашивать время модификации файла, вы можете поместить вызов usleep (unsinged long usec) в ваш цикл while. Вы можете сделать что-то подобное?
const unsigned long polltime = 5000; // 5ms
usleep(polltime);
Другая вещь, чтобы рассмотреть, является ли время ожидания. То есть, что вы делаете, если файл никогда не изменяется - скажем, 10 минут (или 600000000 микросекунд).