Перенаправление ввода/вывода и каналы (В чем разница между этими двумя действиями?)

Модератор: Модераторы разделов

Дениса
Сообщения: 9

Перенаправление ввода/вывода и каналы

Сообщение Дениса »

Народ, всем доброго времени суток.
Вот никак не могу понять в чем принципиальная разница между перенаправлением ввода/вывода (<,>,>>) и каналами (|)? Может у кого есть время объяснить новичку?
Спасибо :)
Спасибо сказали:
Аватара пользователя
Liksys
Сообщения: 2910

Re: Перенаправление ввода/вывода и каналы

Сообщение Liksys »

Перенаправление работает с файлами, а каналы соединяют процессы.
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Перенаправление ввода/вывода и каналы

Сообщение diesel »

Перенаправления ввода-вывода, перенаправляют STDOUT в файл, и STDIN из файла [вместо устройства стандартного ввода-вывода, коим является терминал]. Канал(pipe) перенаправляет STDOUT [одной программы] в STDIN [другой программы]

echo "smth stupid" |awk '{print $1}'

делает ровно тоже самое, что и

echo "smth stupid" > tmp
awk '{print $1}' < tmp
Спасибо сказали:
Дениса
Сообщения: 9

Re: Перенаправление ввода/вывода и каналы

Сообщение Дениса »

то есть, получается <,>,>> используем только с файлами, а | только с процессами? Тогда такой вопрос:

cat /home/jim/report.txt

к чему отнести - к процессу или файлу?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Перенаправление ввода/вывода и каналы

Сообщение diesel »

Дениса писал(а):
22.09.2007 16:52
то есть, получается <,>,>> используем только с файлами, а | только с процессами? Тогда такой вопрос:

внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.

Дениса писал(а):
22.09.2007 16:52
cat /home/jim/report.txt
к чему отнести - к процессу или файлу?

будучи запущенным cat является процессом, а /home/jim/report.txt остается файлом :)
Спасибо сказали:
Дениса
Сообщения: 9

Re: Перенаправление ввода/вывода и каналы

Сообщение Дениса »

diesel писал(а):
22.09.2007 17:08
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.


В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Перенаправление ввода/вывода и каналы

Сообщение diesel »

Дениса писал(а):
22.09.2007 17:31
diesel писал(а):
22.09.2007 17:08
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.


В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?

потому что > предназначен для записи в файл. т.е. у него

STDOUT > file
STDIN < file
STDOUT | STDIN

поток ввода/вывода, и файлы это как бы объекты разной природы... т.е. STDOUT > STDIN и STDOUT > file если бы были допустимы одновременно, то фигня получается ...
Спасибо сказали:
Дениса
Сообщения: 9

Re: Перенаправление ввода/вывода и каналы

Сообщение Дениса »

diesel писал(а):
22.09.2007 17:36
STDOUT > file
STDIN < file
STDOUT | STDIN


если так и не иначе, тогда я удовлетворен, спасибо большое! :)
Спасибо сказали:
Alexey-S
Сообщения: 46
ОС: WinXP Mandriva

Re: Перенаправление ввода/вывода и каналы

Сообщение Alexey-S »

diesel писал(а):
22.09.2007 17:36
STDOUT > file
STDIN < file
STDOUT | STDIN

поток ввода/вывода, и файлы это как бы объекты разной природы... т.е. STDOUT > STDIN и STDOUT > file если бы были допустимы одновременно, то фигня получается ...

Ради общего развития, у процесса (программы) еще есть

2>filename

тем самым мы перенаправляем STDERR в файл.
Теперь вопрос, как STDOUT направить в один процесс, а STDERR исходного процесса в другой процесс?
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Перенаправление ввода/вывода и каналы

Сообщение Uncle_Theodore »

Alexey-S писал(а):
25.09.2007 21:43
Ради общего развития, у процесса (программы) еще есть

2>filename

тем самым мы перенаправляем STDERR в файл.
Теперь вопрос, как STDOUT направить в один процесс, а STDERR исходного процесса в другой процесс?

Вот тут про это забавно написано.
http://www.cpqlinux.com/redirect.html
Или ты хотел, чтоб мы сами догадались? :)
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Перенаправление ввода/вывода и каналы

Сообщение v04bvs »

Дениса писал(а):
22.09.2007 17:31
diesel писал(а):
22.09.2007 17:08
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.


В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?


Потому что так решили писатели программы sh
Спасибо сказали:
Аватара пользователя
Славик
Сообщения: 159
ОС: AltLinux2.4 master

Re: Перенаправление ввода/вывода и каналы

Сообщение Славик »

Дениса писал(а):
22.09.2007 17:31
diesel писал(а):
22.09.2007 17:08
внимательно прочитай. они делают разные вещи просто. >< - перенаправляет STDIN/STDOUT текущего процесса куда-то/из чего-то(ну да, вобщем-то в файл, и из файла), а | траслирует STDIN в STDOUT.


В том то и дело не могу разобраться в их разности. Почему, например, нельзя использовать > для перенаправления STDOUT одного процесса в STDIN другого?


Потому что для интерпретатора энти <, <<, >, >> и | совершенно разные вещи. Перенаправление ищет, (или создаёт) файл куда-откуда надо записать-прочитать. А конвейер подает выход одного процесса на вход другого.
А чтобы не было вопросов, просто берём книжку, и читаем, здесь и здесь (конвейер).
Познание бесконечности требует бесконечного времени.
А. и Б. Стругацкие
Понедельник начинается в субботу
Спасибо сказали: