如何在Linux内核中使用scanf?

3

我对内核编程很新。当我尝试在我的字符设备文件代码中使用scanf时,我收到以下错误消息:错误:隐式声明函数'scanf'

我该如何解决这个问题?请帮帮我。

我在虚拟机中使用的是Linux CentOS。


你在编写代码时,甚至在非内核模式下编程时都不应该使用任何 *scanf 函数。 - zwol
2个回答

7
因为内核没有“标准输入”或“打开文件”,所以提供scanf()函数是没有意义的。(好吧,BSD进程会计是内核打开文件的一个地方。但内核只是写入这个文件。)
你需要寻找的替代函数名为sscanf()vsscanf(),两者都定义在lib/vsprintf.c中:
/**
 * vsscanf - Unformat a buffer into a list of arguments
 * @buf:    input buffer
 * @fmt:    format of buffer
 * @args:   arguments
 */
int vsscanf(const char *buf, const char *fmt, va_list args)

/**
 * sscanf - Unformat a buffer into a list of arguments
 * @buf:    input buffer
 * @fmt:    formatting of buffer
 * @...:    resulting arguments
 */
int sscanf(const char *buf, const char *fmt, ...)

取决于您更喜欢使用哪种方式,选择哪个函数。源代码中的 sscanf() 函数展示了如何使用 vsscanf() 函数,如果您更喜欢使用变长参数调用约定,则可以使用该函数。


-1

你不能在内核中使用libc函数,只能使用纯C。我相信有人可以提供内核等效的函数。


虽然这并不是严格错误,但内核中有许多函数与libc函数具有相同的名称和参数。 - Artelius

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