Как долго 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 байт.