printf如何在内部工作?

sda*_*das 12 c assembly printf standard-library

我很好奇printfLinux内部的工作原理.我不明白它是如何写入数据的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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

R..*_*R.. 8

我想你正在看错了一层.逻辑in vfprintf负责格式化其参数并通过底层stdio函数编写它们,通常是FILE它所针对的对象的缓冲区.用于获取此输出到文件描述符的实际逻辑(或其他非类POSIX系统,基础设备/文件表示)可能是在fwrite,fputc和/或一些__-prefixed内部功能(或许__overflow).

  • 谢谢 - 在这个答案和http://stackoverflow.com/questions/2442966/cc-function-definitions-without-assembly之间我更了解正在发生的事情. (2认同)