Как долго FIFO (именованные каналы) остаются открытыми?

Например, у меня есть скрипт, который записывает время в канал в / etc / pipe. Это пишет непрерывно в течение истинного цикла. Как долго данные в канале будут доступны для чтения? Если я решу прочитать канал через день только с помощью команды cat / etc / pipe, получу ли я все значения времени с момента начала записи?

И наоборот, что если мой цикл записывает только время каждые 10 минут. Смогу ли я получить доступ ко всему через день?

Наконец, представьте, что мой цикл записывает время непрерывно (как в моем первом примере), и я читаю канал каждые 30 минут. Если мой компьютер выключится прямо перед тем, как я прочту канал, будет ли канал пустым после перезагрузки или он будет содержать все эти данные?

1 ответ

Решение

Процесс сможет написать PIPE_BUF байты (см. linux/limits.h) в трубу. Затем он застрянет, пока некоторые данные не будут прочитаны.

Буферизованные данные будут храниться до тех пор, пока открыт хотя бы один конец канала - нет "тайм-аута" или чего-то в этом роде. Однако буферы сохраняются в памяти и не сохраняются после перезагрузки.

Увидеть pipe(7) страница руководства, особенно раздел "Емкость трубы", для получения дополнительной информации.

Труба имеет ограниченную емкость. Если труба заполнена, то write(2) будет блокироваться или давать сбой, в зависимости от того, установлен ли флаг O_NONBLOCK (см. ниже).

[...] Начиная с Linux 2.6.11, объем канала составляет 65536 байт.

Другие вопросы по тегам