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与计算机的内存和输出一起工作,以在屏幕上显示字符.
如果我是汇编代码,我还需要做些什么才能完成相同的任务?它依赖于操作系统吗?
我想你正在看错了一层.逻辑in vfprintf负责格式化其参数并通过底层stdio函数编写它们,通常是FILE它所针对的对象的缓冲区.用于获取此输出到文件描述符的实际逻辑(或其他非类POSIX系统,基础设备/文件表示)可能是在fwrite,fputc和/或一些__-prefixed内部功能(或许__overflow).