LINUX.ORG.RU

Ламерский вопрос про ls

 , ,


0

1

Вопрос наверное немного ламерский, но не знаю, как нагуглить. Есть задание курсовой. В рамках его необходимо создать приложение под linux, которое порождает несколько потоков и обменивается данными. Непонятен вот этот момент:

Для верной работы программ Вам необходимо будет запускать их в конвейерах с какими-либо командами ОС (например, для получения на стандартном потоке ввода вашей программы расширенного списка файлов запустите ls -l | ./myproga).

Подскажите, что произойдет если запустить в таком виде? Первая команда выводит список каталогов, дальше идет формат вывода, а дальше?


stdout из ls попадёт на stdin твоего поделия

anonymous
()

| — оператор, который передает вывод левой команды на ввод правой. Например: ls | ./myprog — передаст весь вывод команды ls на ввод программы myprog.

, < — операторы, которые перенаправляют потоки вывода. Например: ls > directory_contents.txt — сохранит вывод команды ls в файле directory_contents.txt. Или cat directory_contents > ./myprog — передаст содержание файла directory_contents программе myprog.

Еще есть полезная утилита — xargs. Передает вывод, по словам, как аргументы для команды. Например: ls | xargs echo — передаст вывод команды ls, по словам, как аргументы для команды echo, в результате будет выведено содержание каталога. Если попытаться сделать так: ls | echo ничего не будет выведено.

Policeman
()
Ответ на: комментарий от Policeman

Ой, не прочитал, не учел, что '>' используется в разметке.

Policeman
()
Ответ на: комментарий от Policeman

Поправлю:

>, < — операторы, которые перенаправляют потоки вывода. Например: ls > directory_contents.txt — сохранит вывод команды ls в файле directory_contents.txt. Или cat directory_contents > ./myprog — передаст содержание файла directory_contents программе myprog.

Policeman
()

Первая команда выводит список каталогов, дальше идет формат вывода, а дальше?

Первая команда запускается и начинает передавать в пайп свой вывод, вторая команда запускается параллельно и забирает из пайпа то, что туда положила первая команда. Пайп имеет внутренний буфер и если вторая команда не будет забирать данные из пайпа, буфер пайпа запонится, первая команда (процесс) приостановится системой (если используется синхронный i/o). Так же и вторая команда, если буфер пайпа будет пустой, приостановится до появления в пайпе данных.

no-such-file ★★★★★
()
Ответ на: комментарий от Policeman

cat directory_contents > ./myprog — передаст содержание файла directory_contents программе myprog

Лолшто?

mix_mix ★★★★★
()
Ответ на: комментарий от Policeman

cat directory_contents > ./myprog

Юзай < directory_contents ./myprog чтобы не совершать таких ошибок.

В твоём случае ты затрёшь свою прогу.

anonymous
()
Ответ на: комментарий от gwyllum

Выше аноним меня подкорректировал, касательно cat directory_contents > ./myprog, правильно использовать < directory_contents ./myprog

Policeman
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.