我正在编辑用C ++编写的内核模块。我想要一个函数来打印消息,但我想我不能使用cout
或任何标准输入/输出流库函数,因为模块驻留在内核空间中。
我试图加入iostream
库:
....
#include <iostream>
....
当我用g++
编译时,我得到:
error: iostream: No such file or directory
error: 'cout' was not declared in this scope
答案 0 :(得分:2)
Linux内核根本不支持C ++,你不能使用<iostream>
- 我怀疑任何STL也是完全不可能的,但是我已经有一段时间了在Linux内核模式下查看了C ++。
cout
和cerr
的标准实现正在使用操作系统功能,这当然不会在内核中运行。所以你不能使用它们。当然可以实现以相同方式工作的东西(称之为kostream
)和kostream& operator<<(kostream& os, sometype value)
,它会产生一些输出到缓冲区,然后使用printk
或其中一些printk
用于生成实际输出的基元。
无论是C还是C ++,您最终都会使用printk
(或其组成部分)来打印Linux内核中的内容。
请注意,使用fstream
或stringstream
也无法在内核中运行。
答案 1 :(得分:2)
使用 printk api打印消息
printk(KERN_DEBUG "*** This is a debug message only. ***\n");
您可以检查内核模块的打印消息到dmesg