Как ОС Linux позволяет приложениям читать из канала - PullRequest
0 голосов
/ 15 ноября 2010

Меня смущает то, как linux может позволить приложению читать из канала, например "cat / etc / hosts | grep 'localhost'". Я знаю в самостоятельной программе разветвление ребенка и общение по трубе между собой. Но для двух независимых программ, общающихся по трубе, я не знаю как. В примере "cat / etc / hosts | grep 'localhost'" Как Grep узнает, какой дескриптор файла следует прочитать, чтобы получить входные данные из "cat / etc / hosts" Есть ли «обычный» канал, предоставляемый ОС, чтобы Grep знал, где получить информацию? Я хочу знать механизм этого.

1 Ответ

4 голосов
/ 15 ноября 2010

grep в вашем примере получает его от стандартного ввода. Оболочка отвечает за вызов pipe(2) для создания канала, а затем dup2(2) в каждом из fork(2) потомков, чтобы назначить свой конец канала для stdin или stdout перед вызовом одной из функций exec(3) для фактического запуска другие исполняемые файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...