Чтение из файла в C, в то время как он записывается извне - PullRequest
4 голосов
/ 07 ноября 2011

Я хотел бы написать небольшую программу на C, которая читает из файла, пока он активно записывается.Есть идеи?

Ответы [ 2 ]

4 голосов
/ 07 ноября 2011

Если у вас есть контроль над процессом записи, вы должны использовать mmap() с MAP_SHARED как для чтения, так и для записи.Таким образом, читатель увидит изменения, внесенные автором практически сразу.

Также обратите внимание, что Linux не делает снимок данных в файле при открытии файла, поэтому вы должны увидеть изменения, которыесоздаются в файле, даже если вы просто используете read() и lseek().

Чтобы определить, был ли файл изменен / открыт / доступен / и т.д. в Linux, вы можете использовать inotify API (см. inotify manpage ).Это позволяет заставить ваш процесс ждать интересующего вас события, пока оно не произойдет (в отличие от регулярного опроса).Вы также можете использовать epoll() или более традиционный select() для достижения аналогичного результата.

2 голосов
/ 07 ноября 2011

Я думаю, что tail -f это именно то, что вы хотите, не так ли?Взгляните на исходный код: http://www.gnu.org/s/coreutils/

Или этот (не уверен, если обновлен): http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/tail.c

...