Как printf работает внутри страны?

Мне любопытно, как printf работает внутри Linux. Я не понимаю, как он записывает данные в STDOUT.

После небольшого поиска внутренних элементов я загрузил 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 работает с памятью компьютера и выводит на экран символы на экране.

Если бы я был частью кода сборки, что мне нужно было сделать, чтобы выполнить ту же задачу? Это зависит от операционной системы?

Ответ 1

Я думаю, вы смотрите на неправильный слой. Логика в vfprintf отвечает за форматирование своих аргументов и запись их через базовые функции stdio, обычно в буфер в объекте FILE, который он нацеливает. Фактическая логика получения этого вывода в файловом дескрипторе (или в других системах, отличных от POSIX, базовом представлении устройства/файла), вероятно, находится в fwrite, fputc и/или некотором __ -предоставляемом внутреннем функции (возможно, __overflow).