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

3288
n0pe

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

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

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

4

1 ответ на вопрос

6
Let_Me_Be

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

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

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

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

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

Можно ли безопасно изменить это значение? n0pe 13 лет назад 1
@MaxMackie Это должно быть константой. Let_Me_Be 13 лет назад 0
Я понял, я имел в виду, есть ли особый способ изменить это, не имея других проблем с другими программами. И опасно ли устанавливать значение очень высокой постоянной? n0pe 13 лет назад 0
@MaxMackie Я думаю, вы могли бы собрать специальную версию ядра из модифицированных источников. Let_Me_Be 13 лет назад 1

Похожие вопросы