我很好奇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如何与计算机的内存和输出一起工作以在屏幕上显示字符。
如果我是汇编代码,我必须做些什么才能完成相同的任务?它依赖于操作系统吗?
答案 0 :(得分:8)
我认为你在看错了一层。 vfprintf
中的逻辑负责格式化其参数并通过底层的stdio函数编写它们,通常是它所针对的FILE
对象的缓冲区。将此输出提供给文件描述符(或其他非POSIX类系统,底层设备/文件表示)的实际逻辑可能在fwrite
,fputc
和/或某些{{ 1}} - 前缀内部函数(可能是__
)。