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与计算机的内存和输出一起工作,以在屏幕上显示字符。

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

我想你正在看错了一层。 vfprintf的逻辑负责格式化其参数并通过底层的stdio函数编写它们,通常是它所针对的FILE对象的缓冲区。 将此输出获取到文件描述符(或其他非POSIX类系统,底层设备/文件表示)的实际逻辑可能是fwritefputc和/或某些__ -prefixed内部函数(可能是__overflow )。