Как 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
).