在C语言中,当在屏幕上打印某些东西时,我们通常使用printf
,puts
等等。这些都是在其他头文件中定义的。如何在不使用std lib函数的情况下打印某些内容?
有什么办法可以在屏幕上打印某些东西而不使用这些功能吗?也就是说,printf
如何实现?
在C语言中,当在屏幕上打印某些东西时,我们通常使用printf
,puts
等等。这些都是在其他头文件中定义的。如何在不使用std lib函数的情况下打印某些内容?
有什么办法可以在屏幕上打印某些东西而不使用这些功能吗?也就是说,printf
如何实现?
打印到屏幕需要访问帧缓冲(硬件)和用户空间程序不允许直接访问它。所以他们所做的是进行系统调用,内核为他们执行所需的功能。 printf
- >write
系统调用 - >内核将数据写入帧缓冲区,然后将控制权交还给用户程序。 即使您不想使用printf
或puts
(它们是在托管的libc中实现的),仍然必须使用写入系统调用来告诉内核要在哪个设备上写入缓冲区。
最终,C函数printf
将直接或通过write
(请参见man 2 write
)导致系统调用sys_write
。实际的实现取决于编译器和标准库。
library ncurses
可以帮助你,但如果你想使用一个低级别的功能使用write()
,如果你想要做的内核编程,你必须使用printk()
这个问题与'bash'在C中实现的'bash'无关。我回滚了你所做的编辑(添加了bash标签)。如果您的答案不适用,我们可以轻松地对其进行投票,但查找并更正您的不当编辑更加费力,所以请对您的编辑进行更谨慎和保守的处理。 – Anthon 2014-10-05 07:44:04
谢谢@安东 – PersianGulf 2014-10-05 07:45:48
http://linuxinme.blogspot.com/2007/04/debugging-kernel-with-printk.html – PersianGulf 2014-10-05 07:50:38
标准头文件不一定是包含用C代码编写的函数的库。
它们是C“interfase”的函数,但它很可能包含明确的机器代码,在每种情况下都适用于目标系统。
标准头文件通过这种方式提供了执行特殊处理的方法,这是在严格的C代码中无法实现的。
在printf()
的具体情况中,情况更加清楚,因为如果没有标头为#include-d
,那么通过仅使用执行输入/输出操作的C语法没有任何机制。
我更新我的answer.sorry以获得错误答案。 – PersianGulf 2014-10-05 07:44:23