4

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

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

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

1 ответ1

6

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .