Страницы

Поиск по вопросам

суббота, 27 октября 2018 г.

Считывание изменений содержимого файла

Некоторая программа постоянно дописывает определённое кол-во строк в N-е число файлов. Мне необходимо в цикле проверять изменился ли файл, и если в него что-то дописали, то считать эту информацию. Все файлы имеют обычное расширение txt. Существует ли уже готовое решение во фрейморке qt? так сказать "из коробки".


Ответ

Есть такой велосипед tail из GNU core utilities
# dpkg -S `which tail` coreutils: /usr/bin/tail
Можно запустить tail -F /var/log/*.log, -F - флаг говорит утилите следить за изменениями.
Таким образом Ваша задача решается.
Сырцы tail на c: http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c
Кошмарные конечно, но всего 2400 строк.
2234 int main (int argc, char **argv) {
там заполняются хидеры( заголовки ) потом на строке
2328 for (i = 0; i < n_files; i++) ok &= tail_file (&F[i], n_units);
запускается матрёшка из tail-ов на файлы, которые уже в заголовках лежат.
1885 static bool tail_file (struct File_spec *f, uintmax_t n_units) {
внутри вызывается просто tail()
1871 static bool tail (const char *filename, int fd, uintmax_t n_units, uintmax_t *read_pos)
там вызывается tail_lines()
1809 static bool tail_lines (const char *pretty_filename, int fd, uintmax_t n_lines, uintmax_t *read_pos)
И дальше там просто lseek-ами куски вытягиваются... Вообщем, может поможет.
В крайнем случае, можно запустить tail -F {Ваш,Список,Файлов} как subprocess, и ловить pipe с него...

Комментариев нет:

Отправить комментарий