После некоторых исследований эта проблема, кажется, не легко решаема, по крайней мере, не в GNU / Linux, на котором я сейчас сосредоточен.
Возможно использовать кодирование по частям, как описано в boost::beast
' документация Я реализовал обслуживание фрагментов асинхронно из содержимого файлов, которые также читаются асинхронно с помощью boost::asio::posix::stream_descriptor
. Это работает довольно хорошо. Тем не менее, он также останавливается с ошибкой конца файла, как только достигается конец файла. При использовании async_wait
через дескриптор я получаю сообщение об ошибке «Операция не поддерживается».
Таким образом, просто кажется невозможным асинхронное ожидание записи большего количества байтов в файл. Это странно, учитывая, что tail -f
делает именно это. Итак, я strace
ed tail -f
, и получается, что он вызывает inotify_add_watch(4, "path_to_file", IN_MODIFY)
. Следовательно, я полагаю, что для реализации этого на самом деле нужно использовать inotify
.
Мне кажется, что проще и эффективнее взять под контроль процесс, который записывает в файл до сих пор, чтобы позволить ему печатать в стандартный вывод. Затем я могу транслировать канал (аналогично тому, как я пытался транслировать файл) и сам записать файл.
Однако, если кто-то хочет go в будущем, я полагаю, что с помощью inotify
и boost::asio::posix::stream_descriptor
является ответом на вопрос, по крайней мере, в GNU / Linux.