Linux内核中是否有类似于sprintf的C函数?

27

Linux内核中是否有类似于sprintf()的函数(例如printf()->printk())?


1
请注意,对于许多用例,seq_file接口更加适合。 (如果您使用seq_path()seq_escape()功能,请记得在转义字符集中包括\。我已经尝试推动相关的错误修复(例如在/proc中),但是让这样的“边角情况”得到任何形式的认可都太困难了,因此如果您引入了这些错误,则可能只能永远忍受它们。) - Nominal Animal
5个回答

30

我应该包含哪个头文件? - Alex
1
此代码 http://lxr.linux.no/linux+v3.5.3/include/linux/kernel.h#L323 位于 linux/include/linux/kernel.h - Dmitry Zagorulkin
这些有用函数(scnptintfsnprintf等)的实现以及它们的描述在lib/vsprintf.c中。这些函数具有一些用户空间对应函数所没有的有用功能(例如%pS)。 - Eugene
4
这个答案是错误的。上面提到的代码没有嵌入到内核中。内核中可用的sprintf()版本位于lib/vsprintf.c中。我编辑了答案,但被一个不懂情况的人拒绝了。 - mpe
1
你能否扩展一下你的回答,提到像kasfprintf()这样的选项? - 0andriy

2

是的,只需包含linux/kernel.h即可。


0

sprintf()存在缓冲区溢出的安全隐患。 如果您需要将数据从用户空间传递到内核空间,请改用copy_from_user();它的作用类似于copy_to_user(),但方向相反。


0

在运行中崩溃的2.6内核上确认了sprintf()的定义以及其定义位置。

crash> sym sprintf

ffffffff81267ba0 (T) sprintf ../debug/kernel-2.6.39/linux-2.6.39-400.210.2.el6uek/lib/vsprintf.c: 1442


0

是的,例如可以在这里查看结帐

您可以使用grep来查看它是否在内核源代码中


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接