Linux内核中是否有类似于sprintf()
的函数(例如printf()
->printk()
)?
Linux内核中是否有类似于sprintf()
的函数(例如printf()
->printk()
)?
int snprintf(char *buf, size_t size, const char *fmt, ...)
{
va_list args;
int i;
va_start(args, fmt);
i = vsnprintf(buf, size, fmt, args);
va_end(args);
return i;
}
EXPORT_SYMBOL(snprintf);
sprintf()
هچ•ç‹¬ن½؟用ه®¹وک“ه‡؛çژ°ç¼“ه†²هŒ؛و؛¢ه‡؛é—®é¢کم€‚ è¯پن¹¦ç¼“ه†²هŒ؛و؛¢ه‡؛,苹وœç‰
http://lxr.linux.no/linux+v3.5.3/include/linux/kernel.h#L323
位于 linux/include/linux/kernel.h
。 - Dmitry Zagorulkinkasfprintf()
这样的选项? - 0andriy是的,只需包含linux/kernel.h即可。
sprintf()
存在缓冲区溢出的安全隐患。
如果您需要将数据从用户空间传递到内核空间,请改用copy_from_user()
;它的作用类似于copy_to_user()
,但方向相反。
在运行中崩溃的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
seq_path()
或seq_escape()
功能,请记得在转义字符集中包括\
。我已经尝试推动相关的错误修复(例如在/proc
中),但是让这样的“边角情况”得到任何形式的认可都太困难了,因此如果您引入了这些错误,则可能只能永远忍受它们。) - Nominal Animal