C printf如何在内部工作?

C printf如何在内部工作?,c,assembly,printf,standard-library,C,Assembly,Printf,Standard Library,我很好奇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; } 找到

我很好奇
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代码。我想从10000英尺的高度来解释printf是如何使用计算机的内存和输出在屏幕上显示字符的


如果我是一段汇编代码,我要做什么才能完成同样的任务?它依赖于操作系统吗?

我想你找错层了。
vfprintf
中的逻辑负责格式化其参数,并通过底层stdio函数将其写入,通常写入其目标
文件
对象中的缓冲区。将此输出获取到文件描述符(或在其他类似POSIX的非系统上,底层设备/文件表示)的实际逻辑可能是
fwrite
fputc
,和/或一些带有前缀的内部函数(可能是
\uuu overflow
)(几乎像是一个文件)。设备驱动程序接管并解释ASCII值,并告诉监视器如何显示这些值。与磁盘、鼠标等相同。不,他也想了解vfprintf,而不仅仅是底层写入。不过,另一个线程包含其余内容。谢谢-在这个答案和我之间,我对发生的事情有了更好的理解。