Найти подстроку в буфере внутри функции ядра Linux - PullRequest
0 голосов
/ 14 октября 2019

Я новичок в разработке ядра Linux, и у меня есть вопрос, который, как мне кажется, не рассматривался ранее:

Как найти подстроку в буфере внутрифункция ядра?

Представьте, что я читаю в файл приличного размера в буфер (ls -lart говорит, что размер файла составляет около 3000). Я хотел бы найти и распечатать строку, где подстрока существует в этом буфере. Поскольку мы находимся в ядре, большинство стандартных функций stdio.h или string.h, таких как strstr или fgets, недоступны. Поэтому многие текущие вопросы о переполнении стека, такие как: Проверить, существует ли подстрока в строке в C , не являются допустимыми. Однако я нашел такой вопрос: Проверить наличие подстроки в буфере , но является ли использование memmem() лучшей альтернативой? В то время как я могу обманывать, и вручную кодировать, где в буфере я ищу, это не программистский путь.

1 Ответ

1 голос
/ 14 октября 2019

strstr - доступно в ядре Linux. Он объявлен в linux/string.h.

Однако использование memmem может быть более безопасным, если буфер, в который вы прочитали "файл", не завершается нулем.

ЕслиЕсли вы хотите найти полную строку, вы можете добавить \n в начало и конец искомой строки.

В качестве альтернативы, если вы не хотите включать полную строку,Если вы хотите выполнить поиск, вы можете перемотать (используя указатель char или аналогичный) значение \n перед результатом strstr.

Если вы хотите напечатать эту строку, используйте printk изlinux/printk.h. Он похож на printf за исключением того, что он имеет несколько расширений для формата %p - хотя вам, вероятно, не придется беспокоиться о печати указателей.

...