как фильтровать / отправлять сообщения по мере их поступления - PullRequest
1 голос
/ 16 июня 2011

Я хочу написать программу c, которая продолжает чтение файла, и всякий раз, когда в этот файл добавляется новая строка, она отправляется получателю через сеть (предположим, через tcp).

Какой лучший способ сделать это?

o держать файл открытым и делать что-то вроде tail -F для продолжения чтения?

читать файл самостоятельно?

Я не беспокоюсь об отправке по сетевой части, мне нужен лучший способ получить новую строку из файла. В этой строке я мог бы также выполнить некоторую фильтрацию перед отправкой.

1 Ответ

2 голосов
/ 16 июня 2011

Linux имеет inotify , OS X имеет kqueue / kevent , Windows имеет подобные вещи . Все это позволяет вашему процессу блокироваться до тех пор, пока ядро ​​не уведомит вас об изменении файла. Это очень эффективно, потому что ваш процесс может бездействовать до тех пор, пока на самом деле не произойдут изменения, но очевидно, что эти интерфейсы не переносимы.

Единственный переносимый подход заключается в периодическом опросе файла, чтобы определить, изменяется ли он, но, очевидно, это не так эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...