Как использовать scanf в ядре Linux? - PullRequest
2 голосов
/ 24 ноября 2011

Я новичок в программировании ядра. Когда я пытаюсь использовать scanf в коде файла моего устройства персонажа, я получаю это сообщение об ошибке : ошибка: неявное объявление функции «scanf»

Как я могу решить эту проблему? Пожалуйста, помогите мне.

Я использую Linux CentOS в виртуальной коробке.

Ответы [ 2 ]

5 голосов
/ 24 ноября 2011

Поскольку ядро ​​не имеет «стандартного ввода» или «открытых файлов», нет смысла иметь доступную функцию 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() показывает, как использовать функцию vssanf(), если вы предпочитаете использовать соглашение о вызовах varargs.

0 голосов
/ 24 ноября 2011

Вы не можете использовать функции libc в ядре.Только чистый CЯ уверен, что кто-то может предоставить эквивалент ядра.

...