如何在linux内核中使用scanf?

发布于 2024-12-17 21:14:37 字数 124 浏览 0 评论 0原文

我是内核编程的新手。当我尝试在字符设备文件代码中使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

沫雨熙 2024-12-24 21:14:38

因为内核没有“标准输入”或“打开文件”,所以使用 scanf() 函数是没有意义的。 (好吧,BSD 进程记帐是内核确实打开了一个文件的地方。但是内核写入这个文件。)

您正在寻找的替代名称是 sscanf()< /code> 或 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() 的源代码展示了如何使用 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() or vsscanf(), both are defined in 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, ...)

Which one you pick depends upon how you would rather call it. The source for sscanf() shows how to use the vssanf() function, in case you'd rather use the varargs calling convention.

转身泪倾城 2024-12-24 21:14:38

您不能在内核中使用 libc 函数。仅纯C。我确信有人可以提供等效的内核。

You cannot use libc functions in the kernel. Pure C only. I am sure someone can provide the kernel equivalent.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文