2014-10-05 86 views
4

在C语言中,当在屏幕上打印某些东西时,我们通常使用printf,puts等等。这些都是在其他头文件中定义的。如何在不使用std lib函数的情况下打印某些内容?

有什么办法可以在屏幕上打印某些东西而不使用这些功能吗?也就是说,printf如何实现?

+0

我更新我的answer.sorry以获得错误答案。 – PersianGulf 2014-10-05 07:44:23

回答

2

打印到屏幕需要访问帧缓冲(硬件)和用户空间程序不允许直接访问它。所以他们所做的是进行系统调用,内核为他们执行所需的功能。 printf - >write系统调用 - >内核将数据写入帧缓冲区,然后将控制权交还给用户程序。 即使您不想使用printfputs(它们是在托管的libc中实现的),仍然必须使用写入系统调用来告诉内核要在哪个设备上写入缓冲区。

11

最终,C函数printf将直接或通过write(请参见man 2 write)导致系统调用sys_write。实际的实现取决于编译器和标准库。

0

library ncurses可以帮助你,但如果你想使用一个低级别的功能使用write(),如果你想要做的内核编程,你必须使用printk()

+0

这个问题与'bash'在C中实现的'bash'无关。我回滚了你所做的编辑(添加了bash标签)。如果您的答案不适用,我们可以轻松地对其进行投票,但查找并更正您的不当编辑更加费力,所以请对您的编辑进行更谨慎和保守的处理。 – Anthon 2014-10-05 07:44:04

+0

谢谢@安东 – PersianGulf 2014-10-05 07:45:48

+0

http://linuxinme.blogspot.com/2007/04/debugging-kernel-with-printk.html – PersianGulf 2014-10-05 07:50:38

1

标准头文件不一定是包含用C代码编写的函数的库。
它们是C“interfase”的函数,但它很可能包含明确的机器代码,在每种情况下都适用于目标系统。
标准头文件通过这种方式提供了执行特殊处理的方法,这是在严格的C代码中无法实现的。

printf()的具体情况中,情况更加清楚,因为如果没有标头为#include-d,那么通过仅使用执行输入/输出操作的C语法没有任何机制。

相关问题