@Quttar72
Изучаю asp.net core mvc

Как программа информирует консоль о запросе ввода?

Это больше теоретический вопрос, так как я хочу понять в какую сторону мне вообще нужно копать в решении моей задачи.

Пусть у нас есть программа, которая пишет в консоль раз в секунду какой-нибудь текст. Мы можем её запустить напрямую, через консоль PowerShell, через новый терминал Windows. Будем считать, что мы неплохие программисты и все работает программа выполняет свою задачу. Но именно мне одна деталь не дает покоя - а как консоль понимает, что программа ничего не запросила от пользователя? То есть через какую-бы мы консоль не запустили программу, сама консоль не будет позволять вводить данные.

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

Если перейти больше к сути, для чего это делаю, то это взаимодействие моей программы написанной на c#, через потоки ввода-вывода с некоторой другой абстрактной программой, которая использует эти потоки. Она в общем случае-то тоже может быть написана на c#. Проблема с которой я столкнулся в том, что я могу писать в стандартный поток ввода когда угодно. Безусловно отсутствие ограничение приятно, но возможно ли все же как-то узнать, запросила программа ввод, или нет?

Проверял свойства объекта представляющего стандартный поток ввода в c#, никакой зависимости между значениями этих свойств, когда программа запрашивает данные и не запрашивает найти не удалось
  • Вопрос задан
  • 88 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
Никак она не знает. Когда запускается код запроса пользовательских данных, то он так же включает механизм "эха", т.е. введённый символ так же отправляется на вывод, чтобы пользователь видел свой труд.
Во время выполнения программы так же можно тыкать в клаву, и эти данные уйдёт на ввод, просто мы не видим их на экране. Бывают даже программы, где перед запуском кода запроса данных от пользователя они не очищают буфер и весь тот мусор, что мы жамкали раньше попадает на вход.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
А зачем консоли что-то понимать? Если ваша программа запущена в foreground, то она перехватывает stdin, stdout и stderr на себя и консоль просто ждёт завершения программы. Если запущена в фоне, то у неё свои потоки, никак не связанные с консолью, и консоли всё равно, что делает программа.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы