【问题标题】:How does printf work internally? [duplicate]printf 如何在内部工作? [复制]
【发布时间】:2013-08-19 05:58:59
【问题描述】:

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

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

【问题讨论】:

  • 这一切都归结为写入设备(几乎就像是文件一样)。设备驱动程序接管并解释 ASCII 值并告诉监视器如何显示它们。磁盘、鼠标等也是如此。
  • 不,他也想了解 vfprintf,而不仅仅是底层的 write。不过,其他线程包含其余部分。

标签: c assembly printf standard-library


【解决方案1】:

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

【讨论】:

猜你喜欢
  • 2011-05-07
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 2020-05-07
  • 2020-06-21
  • 2012-04-13
  • 2020-01-31
  • 1970-01-01
相关资源
最近更新 更多