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