Захотелось мне узнать, как работает консольный вывод под капотом. Знаю, что данные просто пишутся в stdout, но тут встаёт два вопроса: 1. А как программы находят этот самый stdout? 2. Каким образом они записывают в него данные?
Хотелось бы узнать, как это работает именно в случае с языками по типу Java или C#, т.к с низкоуровневыми языками всё более-менее понятно (слышал, что в unix-подобных системах этот stdout лежит в /dev/fd/1 и записать данные в него можно используя API POSIX).
Наглая Морда, В случае JVM есть функции на C++ экспортируемые в пространство имён Java. И именно эта функция вызывает write. C# по моему мнению круче. Там все обёртки генерируются JIT на основе атрибутов.
Наглая Морда, а в чём проблема-то? Программа на Java вызывает функцию виртуальной машины, отвечающую за вывод, а виртуальная машина - это обычная программа, написанная на C.
Наглая Морда, Так вы дергаете совершенно обычную функцию write (кстати почему не cout?)
а вместо файл дескриптора указываете собственно stdout
в любом языке есть обращение к консоли, если это консольная программа.