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

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


person sdasdadas    schedule 16.08.2013    source источник
comment
Все сводится к записи на устройство (почти как в файл). Драйвер устройства берет на себя и интерпретирует значения ASCII и сообщает монитору, как их отображать. То же самое с дисками, мышками и т. Д.   -  person Jiminion    schedule 16.08.2013
comment
нет, он тоже хочет понять vfprintf, а не только лежащую в основе запись. Тем не менее, другой поток содержит все остальное.   -  person Antti Haapala    schedule 17.08.2013


Ответы (1)


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

person R.. GitHub STOP HELPING ICE    schedule 16.08.2013
comment
Спасибо - между этим ответом и stackoverflow.com/questions/ 2442966 / Я лучше понимаю, что происходит. - person sdasdadas; 16.08.2013