【发布时间】: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