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

标签 c linux string linux-kernel kernel

我是 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不那么有效。但是,我确实发现了一个问题:Check for substring in a buffer ,但是使用 memmem() 是最好的选择吗?虽然我可以作弊,并在我正在查找的缓冲区中手动硬编码,但这不是程序员的方式。

最佳答案

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

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

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

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

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

关于c - 在 Linux 内核函数中的缓冲区中查找子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58367945/

相关文章:

c - 在英特尔 64 位机器上启用/禁用缓存 : CD bit always set?

regex - 将正则表达式放在变量中

mysql - Bash 从 96 个数据库导出不同的表

linux - bash脚本curl请求中的转义变量

linux - 内核线程如何只为它们自己请求页面?

java - 我正在编写代码,通过获取输入使用 java 中的字符串显示 friend 的姓名。但索引 0 没有获取条目

string - 根据动态模式匹配符号流

c - 函数指针

c++ - 在网络上查找和分发字典更改的最佳方式

C 编程基础