Сравнение времени статистики файла

Мне нужно следить за модификацией файла в системе на основе 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
}

2

Решение

Логика проверки времени мода в основном правильная.

Вам нужно только проверить ошибку, возвращаемое значение 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 () return
значение.

Если вам случится получить представление о том, как часто вам нужно опрашивать файл
время модификации, вы можете поместить вызов usleep (unsinged long usec) внутри
ваш цикл пока. Вы можете сделать что-то подобное?

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

Другая вещь, чтобы рассмотреть, является ли время ожидания. То есть что ты делаешь
если файл никогда не изменяется — скажем, 10 минут (или 600000000 микросекунд).

3

Другие решения


По вопросам рекламы [email protected]