FIFO буферы в linux? приложение пишет (построчно) периодически в fifo ($ mkfifo fifo-file)
хочу с помощью tail -f забирать данные по мере поступления и работать с ними через пайпы
на деле данные сбрасываются кусками по 4096 байт.
почему так? что именно это за буфер? настраивается ли размер буфера? можно ли выключить буфер и таскать данные по мере фактической записи?
если отправите читать матчасть - то буду очень рад хорошим материалам в тему
заранее спасибо!

21 Авг 2019 в 06:53
180 +1
0
Ответы
1

FIFO (First In First Out) буферы в Linux работают по принципу передачи данных в порядке их поступления. Они могут использоваться для передачи данных между процессами, как в вашем случае, когда приложение пишет данные в FIFO, а другой процесс читает их оттуда.

При использовании tail -f для чтения данных из FIFO, данные будут считываться кусками (обычно по 4096 байт), потому что внутри ядра Linux используется буферизация для повышения производительности. Это помогает уменьшить количество обращений к диску и улучшить общую производительность системы.

Размер буфера в FIFO зависит от системных параметров и настроек ядра. Обычно он устанавливается в 4096 байт, но его можно изменить с помощью команды fcntl или через настройки ядра.

Чтобы таскать данные по мере фактической записи, можно использовать параметр -n в команде tail, чтобы устанавливать меньший размер буфера или даже его отключить. Например, tail -n 1 будет читать данные по одной строке.

Если вы хотите углубиться в тему, рекомендуется изучить документацию по FIFO в Linux, man-страницы для команд mkfifo, tail и fcntl, а также материалы о работе с процессами и передачей данных между ними в Linux.

20 Апр 2024 в 13:11
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир