如何在linux内核中使用scanf?
我是内核编程的新手。当我尝试在字符设备文件代码中使用 scanf 时,我收到此错误消息 :错误:函数“scanf”的隐式声明
我该如何解决这个问题?请帮帮我。
我在虚拟机中使用Linux CentOS。
I'm new to the kernel programming. When i try to use scanf in my character device file code, i'm getting this error message
:error: implicit declaration of function ‘scanf’
How can i solve this problem ? Please help me out.
I'm using linux CentOS in virtual box.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为内核没有“标准输入”或“打开文件”,所以使用
scanf()
函数是没有意义的。 (好吧,BSD 进程记帐是内核确实打开了一个文件的地方。但是内核写入这个文件。)您正在寻找的替代名称是
sscanf()< /code> 或
vsscanf()
,两者均在lib/vsprintf.c
中定义:您选择哪一个取决于您希望如何调用它。
sscanf()
的源代码展示了如何使用vssanf()
函数,以防您更愿意使用可变参数调用约定。Because the kernel does not have a "standard input" or "open files", it makes no sense for there to be a
scanf()
function available. (Okay, the BSD process accounting is a place where the kernel does have a file open. But the kernel writes this file.)The replacement you are looking for is named either
sscanf()
orvsscanf()
, both are defined inlib/vsprintf.c
:Which one you pick depends upon how you would rather call it. The source for
sscanf()
shows how to use thevssanf()
function, in case you'd rather use the varargs calling convention.您不能在内核中使用 libc 函数。仅纯C。我确信有人可以提供等效的内核。
You cannot use libc functions in the kernel. Pure C only. I am sure someone can provide the kernel equivalent.