在 Linux 内核函数内的缓冲区中查找子字符串

Find a sub-string within a buffer inside a Linux kernel function

我是 Linux 内核开发的新手,我有一个我认为以前没有解决的问题:

How do you find a sub-string within a buffer inside a kernel function?

假设我将一个大小合适的文件读入缓冲区(ls -lart 表示文件大小约为 3000)。我想查找并打印该缓冲区中存在子字符串的行。因为我们在内核中,所以大多数标准 stdio.hstring.h 函数如 strstrfgets 不可用。当前有很多堆栈溢出问题,例如:Check substring exists in a string in C are not as valid. However, I did find a question like: Check for substring in a buffer,但是使用 memmem() 是最好的选择吗?虽然我可以作弊,并在我正在查看的缓冲区中手动硬编码,但这不是程序员的方式。

strstr 在 Linux 内核中可用。它在 linux/string.h.

中声明

但是,如果您将 "file" 读入的缓冲区不是 nul 终止的,则使用 memmem 可能会更安全。

如果要搜索整行,可以在要搜索的字符串的开头和结尾添加 \n

或者,如果您不想包含要搜索的完整行,您可以倒带(使用 char 指针或类似的指针)到结果之前的 \n strstr.

如果要打印此字符串,请使用 linux/printk.h 中的 printk。它与 printf 类似,只是它对 %p 格式进行了一些扩展——尽管您可能不必为打印指针而烦恼。