在C语言中,当在屏幕上打印内容时,我们通常使用printf
,puts
等。这些都在头文件或其他头文件中定义。
有没有办法在不使用这些功能的情况下在屏幕上打印某些内容?也就是说,printf
是如何实现的?
答案 0 :(得分:11)
最终,C函数printf
将直接或通过sys_write
(参见write
)进行man 2 write
系统调用。实际的实现取决于编译器和标准库。
答案 1 :(得分:2)
打印到屏幕需要访问帧缓冲区(硬件),并且不允许用户空间程序直接访问它。所以他们做的是进行系统调用,内核为它们执行所需的功能。 printf
- > write
系统调用 - > kernel将数据写入framebuffer,然后将控制权返回给用户程序。
即使您不想使用printf
或puts
(它们在托管的libc中实现),您仍然必须使用write系统调用来告诉内核您要在哪个设备上编写缓冲液中。
答案 2 :(得分:1)
标准头文件不一定是包含用C代码编写的函数的库
它们是C" interfase"的功能,但很可能它们包含显式机器代码,在每种情况下都适用于目标系统。
以这种方式,标准头文件提供了在严格的C代码中无法实现的特殊过程的方法。
在printf()
的特定情况下,情况更加清晰,因为如果没有标头是#include-d
,那么通过使用仅执行输入的C语法就没有任何机制/输出操作。
答案 3 :(得分:0)
library ncurses
可以为您提供帮助,但是如果您想使用低级函数,请使用write()
,如果您想进行内核编程,则必须使用printk()