printf如何在内部工作?

时间:2013-08-16 18:28:56

标签: 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;
}

在找到这个之后,我深入研究了vfprintf函数 - 但该文件大约有2500行不熟悉的C代码。我正在寻找10,000英尺的解释,说明printf如何与计算机的内存和输出一起工作以在屏幕上显示字符。

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

1 个答案:

答案 0 :(得分:8)

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