LINUX.ORG.RU

stdin и stdout

 ,


0

1

Прошу прощения за тупой вопрос:)

то что пишется в stdin читается(другим объектом) из stdout.

Это можно представлять, как виртуальные файлы. Но очевидно, что между stdin и stdout так же есть подковерный канал, иначе как из одного данные попадают в другой?

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



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

то что пишется в stdin читается из stdout.

Наоборот. И совсем не обязательно. Можно читать из stdin и не писать в stdout. А можно писать в stdout то, что не было прочитано из stdin.

зачем это было дробить на 2 сущности

Затем, что это такие же разные сущности как монитор и клавиатура.

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

anonimous, ты сменил формат? Раньше ворочил жир среди js, теперь среди POSIX?

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

Наоборот.

Возьмем такой вот пример:

cat < &0
система тут что делает? с клавиатуры направляет в stdin? так? А cat из него читает, и выводит на stdout. Из этого можно сделать вывод, что, по-дефолту, все идет в stdin, или я что-то путаю?

onceagain2017
() автор топика

сделать один общий поток

Покажи, как должно быть это сделано по твоему. Иначе не понять тебя.

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

А что значит покажи? Я как раз не понимаю, зачем вообще два потока нужны. Допустим, с клавиатуры все попадает в единственный поток, оттуда же читают и все программы. И туда же могут писать, при желании. Почему так нельзя сделать? Ведь все равно, их stdin система все перебрасывает в stdout.

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

stdin есть у каждого процесса свой. Можно хоть в один stdin втроём долбить по очереди, если сильно охота. Можно наоборот одному долбить в несколько stdin других процессов и т.д.

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

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

Как потом разобраться где чьё и кому что предназначается? Короче, тупак -7, а то, про что ты пишешь - это FIFO.

crutch_master ★★★★★
()
Последнее исправление: crutch_master (всего исправлений: 2)
Ответ на: комментарий от crutch_master

Как потом разобраться где чьё и кому что предназначается

Но ты же сам пишешь, что у каждого процесса свой поток ввода-вывода, что тут разбираться? Обращайся по конкретному адресу тогда. Это тут, по-моему, вообще не при чем

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

Как наоборот?

А вот так. Из stdin читают, а в stdout пишут, а не наоборот.

Ввод от клавиатуры идет сразу в stdout?

Нет.

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

Из этого можно сделать вывод, что, по-дефолту, все идет в stdin

stdin - это standard input - стандартный ввод. Это одна часть классического терминала. stdout же - это вторая часть классического терминала - standard output - стандартный вывод.

Чтение символов с stdin ещё не означает, что они должны автоматически перенаправляться в stdout. Та же библиотека ncurses содержит функцию noecho(), которая отключает это перенаправление. А соответствующий ман гласит, что это эхо в самом драйвере tty всегда по дефолту выключено, а авторы shell'ов его включают своими реализациями. В ncurses тоже есть своя реализация эха, которое в ней тоже по дефолту включено. Но, его можно и отключать.

saahriktu ★★★★★
()

Это и есть один объект, который представляет собой буфер в ядерной памяти. С ним связан пишущий процесс через свой дескриптор (допустим, stdout) и читающий через свой (допустим, stdin). 2 процесса, 2 дескриптора, 1 пайп. Выкидывать из этой схемы нечего.

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

А, ну вот это еще более или менее понятно:) Спасибо.

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

Вот тебе небольшой наводящий вопрос:

Где ты это делаешь?

Небольшой наводящий ответ - в оболочке.

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

Обращайся по конкретному адресу тогда.

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

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

А соответствующий ман гласит, что это эхо в самом драйвере tty всегда по дефолту выключено, а авторы shell'ов его включают своими реализациями. В ncurses тоже есть своя реализация эха, которое в ней тоже по дефолту включено. Но, его можно и отключать.

Вы всё перепутали. echo терминалом в каноническом режиме включено. А shell - выключает. ncurses вообще не меняет умолчание, а имеет отдельные функции управления echo. Увидеть разницу просто.

$ cat
и нажимаем стрелоку. Если печатается что-то типа ^[[A, то это и есть echo. А вот в shell это будет скушано библиотекой readline и произойдёт действие с историей/редактировании командной строки, а не echo.

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от vodz
echo/noecho
       The echo and noecho routines control whether characters typed by the user are echoed by getch as they
       are typed.  Echoing by the tty driver is always disabled, but initially getch is  in  echo  mode,  so
       characters  typed are echoed.  Authors of most interactive programs prefer to do their own echoing in
       a controlled area of the screen, or not to echo at all, so they disable echoing  by  calling  noecho.

Это цитата из мана, да.

saahriktu ★★★★★
()
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Это цитата из мана, да.

Ну цитата в некотором смысле права - никем неиспользованный tty не имеет какие-либо флаги, в том числе и echo. Но как правило, такой неициализированный tty обычному пользователю даже не доступен, потому зачем в man-е это рассматривается совсем непонятно. А принадлежащий пользователю tty считаестя в обычном режиме таки проинициализированный в canon, включающий и echo. Если копать сильнее, то и с шеллами можно придраться, так как можно раскопать shell, который не меняет канонический режим и работает без редактора строки.

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