Могу ли я использовать strtok() в модуле ядра Linux?

Мне нужно выполнить синтаксический анализ данных, записанных в мой модуль, и использование функции strtok() из string.h было бы полезно. Однако я пробовал

#include <string.h>

и

#include <linux/string.h>

без успеха. Это возможно? Или мне придется написать свою собственную функцию strtok?

Спасибо


person cheesysam    schedule 11.02.2010    source источник


Ответы (3)


В действительном API ядра Linux нет strtok. Вам придется написать свой собственный. См. раздел Операции со строками в API ядра Linux.

Кстати, я бы посоветовал держаться подальше от strtok (или чего-то подобного strtok). Он не реентерабельный и небезопасен в коде ядра (который по своей сути является многопоточным).

Если вы собираетесь дублировать функцию, рассмотрите возможность дублирования strtok_r.

person 0xfe    schedule 11.02.2010
comment
Хорошо, круто, по крайней мере, я точно знаю, что теперь я должен написать свой собственный, спасибо! - person cheesysam; 11.02.2010

В последней библиотеке ядра есть это, что может делать то, что вам нужно:

/**
 * strsep - Split a string into tokens
 * @s: The string to be searched
 * @ct: The characters to search for
 *
 * strsep() updates @s to point after the token, ready for the next call.
 *
 * It returns empty tokens, too, behaving exactly like the libc function
 * of that name. In fact, it was stolen from glibc2 and de-fancy-fied.
 * Same semantics, slimmer shape. ;)
 */
person Tim Schaeffer    schedule 11.02.2010

char *strsep(char **s, const char *ct)

будет функция, которую вы ищете.
Вы можете посмотреть ее вверх в lxr, source/lib/string.c, строка 589 (для версии/выпуска 4.6)

person Aby Sam Ross    schedule 07.06.2016