Мне любопытно, как printf
работает внутри Linux. Я не понимаю, как он записывает данные в STDOUT
.Как работает printf внутри?
После недолгих поисков внутренностей, я скачал glibc
и взглянул на исходном коде:
__printf (const char *format, ...)
{
va_list arg;
int done;
va_start (arg, format);
done = vfprintf (stdout, format, arg);
va_end (arg);
return done;
}
После обнаружения этого я пошел глубже в функцию vfprintf
- но файл составляет около 2500 строки незнакомого кода C. Я ищу объяснение от 10 000 футов, как printf работает с памятью компьютера и выводит на экран символы на экране.
Если бы я был частью кода сборки, что мне нужно было сделать, чтобы выполнить ту же задачу? Это зависит от операционной системы?
Все это сводится к записи на устройство (почти как если бы это был файл). Драйвер устройства берет на себя и интерпретирует значения ASCII и сообщает монитору, как их отображать. То же самое с диском, мышами и т. Д. – Jiminion
нет, он хочет понять vfprintf тоже, а не только основную запись. Тем не менее, остальная часть содержит остальные. –