Могу ли я использовать strtok () в модуле ядра Linux? - PullRequest
7 голосов
/ 11 февраля 2010

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

#include <string.h>

и

#include <linux/string.h>

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

Спасибо

Ответы [ 3 ]

15 голосов
/ 11 февраля 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. ;)
 */
7 голосов
/ 11 февраля 2010

В действующем API ядра Linux нет strtok.Вам придется написать свой собственный.См. Раздел Манипулирование строками в API ядра Linux.

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

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

2 голосов
/ 07 июня 2016

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...