LINUX.ORG.RU

стандартные потоки ввода/вывода объясните для чайника

 ,


0

1

Я недавно начал изучат Linux и пока что являюсь чайником. Захотел узнать что такое «Стандартные потоки ввода/вывода». Порысков в интернете, найдя разные определение на разных сайтах, я все таки не понял, что это такое. Можете объяснить простыми словами пожалуйста



Последнее исправление: Beka (всего исправлений: 1)

man stdin почитай. Кстати к линуксу эти потоки не имеют каког-то эксклюзивного отношения, они доступны в любой ОС где есть С.

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

ТС, как сказали выше - ман в помощь.

В двух словах, как я понимаю - это потоки для ввода, вывода и ошибок. Стандартно оно у тебя должно мапиться к твоему терминалу - то есть в терминале у тебя и ввод (стдин), и вывод (стдаут), и ошибки оно тебе валит.

Это значит, что любые ошибки и любой вывод твоей программы (echo, например) у тебя будет показываться в терминале.

Кстати, имею заковыристый вопрос (как мне кажется). У нас stdin, stdout, stderr автоматически появляются у любого процесса и имеют соответственный файловый дескриптор в /proc/$PID/fd/{0..2}

Почему, если запустить скрипт, который будет просто в цикле делать echo и при этом, в другом терминале запустить tail -f /proc/$PID/fd/1 я не увижу выхлопа?

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

Потому что в этом случае его /proc/$PID/fd/1 - это псевдотерминал, а pty-устройства отправляют вывод только одному клиенту

annulen ★★★★★
()

Стандартный вывод программы - это, что должно идти на стандартный ввод другой программы. Всё остальное должно идти в standard error.

yvv ★★☆
()

А что такое вообще ввод-вывод в текстовом терминале? Вывод - это тот текст, который выводится в терминал. Ввод - это то, что читается с клавиатуры или из файла. Вот это вот и есть «стандартные потоки ввода/вывода».

saahriktu ★★★★★
()

Давным давно, в далёкой далёкой голактиге

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

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

И короче эта абстракция дожила до наших дней и любая запущеная программа автоматом имеет ввод и вывод, но не обязана их использовать. Когда ты открываешь эмулятор терминала и видишь там текст, это значит какая-то программа что-то написала в свой стандартный поток вывода.

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

Понял, то есть в файловые дескрипторы 0, 1, 2 по факту мапится терминал, где был запущен процесс.

annulen, спасибо!

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