# 系统输出KOUT

​		通过RustSBI，我们可以封装出getchar，作为最基础的输出使用，但这过于原始，因此我们还需要比较高级的输出，用于打印调试信息、日志等。

​		常规开发中，C语言使用printf进行格式化输出，C++一般使用cout，在内核开发中，开发者一般都会编写一个类似printf功能的函数printk之类。我们由于使用的是C++语言，并且此前我在编写应用时也写过类似于cout的用于调试的工具，因此我们选择实现kout这一功能。

​		使用感受上，kout和cout类似，实现技术上，我们使用运算符重载和模板适配了基本类型。此外，对于未知类型，我们以十六进制打印它的结果，就像是使用十六进制查看器一样展示。

​		我们还重载了方括号，里面可以填入Info、Warning、Error、Debug、Fault、Test作为通道，输出时会按对应通道的颜色显示，并带有通道标识，这样调试的时候看上去会比较清晰，并且可以随时开关某个通道是否输出。特别的，对于Fault通道，输出完了之后会转入KernelMonitor，等待用户处理。

​		我们也重载了圆括号，通过边长模板技术，使得里面可以以像printf一样的使用方法输出。

​		由于我们的输出带有了颜色和通道，因此我们规定endl不止用来换行，同时也会清空当前设定的状态信息。





-----------------

By：qianpinyi

2022.06.05