12

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

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

4

1 回答 1

8

我认为您正在查看错误的图层。in 的逻辑vfprintf负责格式化其参数并通过底层的 stdio 函数将它们写入,通常写入其FILE目标对象的缓冲区中。将此输出获取到文件描述符(或在其他非 POSIX-like 系统上,底层设备/文件表示)的实际逻辑可能在fwrite,fputc和/或一些__带前缀的内部函数中(可能是__overflow)。

于 2013-08-16T18:34:53.880 回答