Я работаю в системе Linux, которая работает на ядре 3.2.0. В этой системе я написал программу, которая в конце концов сгенерирует примерно 50 ГБ данных, которые затем отправит на стандартный вывод. Этот вывод я хочу перенаправить в файл.

Может ли произойти переполнение трубы? Или каналы работают надежно, независимо от объема данных?

1 ответ1

3

Трубы не могут переполниться. Канал - это просто буфер (определенный объем памяти, скорее всего, 64 КБ в текущей системе) между производителем и потребителем. Если производитель производит быстрее, чем потребляет потребитель, производитель блокируется (это означает, что программа будет находиться в спящем режиме), пока потребитель снова не освободит место в буфере, читая из него.

Кроме того, случай, который вы описываете, технически не труба. Если мы говорим о POSIX sh , перенаправление в файл (acommand > afile) превращает стандартный вывод команды непосредственно в файл. Труба включает в себя | символ, по совпадению также называемый "труба", и является связующим звеном между двумя запущенными программами: acommand | anothercommand .

(Но опять же, то, что действительно происходит за кулисами, это другая история: например, в /dev есть много файлов псевдоустройств, которые фактически перенаправляют на запущенные процессы. Например, echo Hello World > /dev/pts/1 может записывать в ваш текущий xterm)

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