Другой вывод команды Linux (Piped) в качестве входных данных для моей программы на C

Сейчас я работаю над небольшой программой на Си в Linux. Позвольте мне объяснить вам, что я хочу сделать с примером команды Linux ниже

ls | grep hello

Вышеприведенная команда выполняется в следующей страсти (Дайте мне знать, если яЯ понял это неправильно)

Команда ls будет выполнена первойВыходные данные будут переданы команде grep, которая снова сгенерирует выходные данные путем сопоставленияПривет"

Теперь я хотел бы написать C-программу, которая будет принимать по конвейеру выходные данные одной команды. Значит, в подобной страсти какGrep» Программа смогла получить входные данные от команды ls (в моем примере выше).

Аналогичный вопрос был задан другим пользователемВот, но по какой-то причине эта тема была помечена как "Не верный вопрос

Сначала я думал, что мы можем получить это как аргумент командной строки для C-программы. Но это не так.

 DaoWen01 июн. 2013 г., 20:03
Трубы Unix работают черезSTDIN а такжеSTDOUT, Вам просто нужно прочитатьстандарт в чтобы получить ваш вклад и написатьстандартный выход дать свой вывод.
 Santhosh Reddy Mandadi01 июн. 2013 г., 20:35
Спасибо DaoWen - ямы реализовали это, читая входные данные из STDIN

Ответы на вопрос(2)

Если факт,ls а такжеgrep начинается в то же время.

ls | grep hello значит, использоватьlsстандартный вывод какgrepстандартный ввод.ls записать результаты в стандартный вывод,grep ждет и читает любой вывод из стандартного ввода сразу.

Все еще есть сомнения? Сделай эксперимент. бежать

find / | grep usr

find / перечислит все файлы на компьютере, это займет много времени.

Еслиls сначала запускается, затем ОС выдает выводgrep, мы должны долго ждать с пустым экраном, покаfind закончил иgrep началось. Но мы можем увидеть результаты сразу, чтодоказательство тому.

 比尔盖子01 июн. 2013 г., 20:26
Вы'верно. Это неТ ответить на вопрос. Я хотел описать это комментарием, но хочу сделать его более читабельным ...
 Cairnarvon01 июн. 2013 г., 20:20
Хотя это правда, это неТ точно ответить на вопрос.
Решение Вопроса

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

Вы можете получить к нему доступ, используя обычныйscanf или жеfread функции.scanf и т.п. работают с stdin по умолчанию (так же, какprintf по умолчанию работает на stdout; при отсутствии канала к терминалу подключается стандартный ввод), а стандартная библиотека С обеспечиваетFILE *stdin для таких функций, какfread это читать из потока файлов.

POSIX также обеспечиваетSTDIN_FILENO макрос вunistd.h, для функций, которые работают с дескрипторами одного файла. По сути, это всегда будет 0, но этоплохая форма, чтобы полагаться на то, что это так.

 Santhosh Reddy Mandadi01 июн. 2013 г., 20:33
Спасибо - ямы только что реализовали программу используязсапЕ» который сделал свое дело.

Ваш ответ на вопрос