pluffie
@pluffie
Стыдно за старые вопросы

Как языки, исполняемые на ВМ, пишут в консоль?

Захотелось мне узнать, как работает консольный вывод под капотом. Знаю, что данные просто пишутся в stdout, но тут встаёт два вопроса: 1. А как программы находят этот самый stdout? 2. Каким образом они записывают в него данные?

Хотелось бы узнать, как это работает именно в случае с языками по типу Java или C#, т.к с низкоуровневыми языками всё более-менее понятно (слышал, что в unix-подобных системах этот stdout лежит в /dev/fd/1 и записать данные в него можно используя API POSIX).
  • Вопрос задан
  • 203 просмотра
Решения вопроса 1
saboteur_kiev
@saboteur_kiev
software engineer
stdout это просто дескриптор, который открывает консоль.

Для каждой консольной программы открывается три дескриптора с номерами 0, 1, 2 (stdin, stdout, stderr), куда они могут писать.

/dev/fd/1
Нет, fd это просто файловый дескриптор/1
правильный путь будет /proc/ID_процесса/fd/1
то есть у каждого процесса stdout свой.

Ну и еще. Неважно какой язык. Это про архитектуру операционки, а не язык.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
hint000
@hint000
у админа три руки
как это работает именно в случае с языками по типу Java или C#
Это запрятано в библиотечных функциях и программист может не задумываться о том, как оно работает. Вызываете стандартную функцию вывода и она делает всю работу. Примеры:
https://ru.wikipedia.org/wiki/Printf
https://prog-cpp.ru/cpp-std/
записать данные в него можно используя API POSIX
Может быть и можно. Но на самом-то деле все используют те же самые библиотечные функции.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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