2013-08-16 3 views
11

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

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

+0

Все это сводится к записи на устройство (почти как если бы это был файл). Драйвер устройства берет на себя и интерпретирует значения ASCII и сообщает монитору, как их отображать. То же самое с диском, мышами и т. Д. – Jiminion

+0

нет, он хочет понять vfprintf тоже, а не только основную запись. Тем не менее, остальная часть содержит остальные. –

ответ

7

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

+2

Спасибо - между этим ответом и http://stackoverflow.com/questions/2442966/c-c-function-definitions-without-assembly. Я лучше понимаю, что происходит. – sdasdadas

Смежные вопросы