在 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.h
或 string.h
函数如 strstr
或 fgets
不可用。当前有很多堆栈溢出问题,例如: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
格式进行了一些扩展——尽管您可能不必为打印指针而烦恼。
我是 Linux 内核开发的新手,我有一个我认为以前没有解决的问题:
How do you find a sub-string within a buffer inside a kernel function?
假设我将一个大小合适的文件读入缓冲区(ls -lart
表示文件大小约为 3000)。我想查找并打印该缓冲区中存在子字符串的行。因为我们在内核中,所以大多数标准 stdio.h
或 string.h
函数如 strstr
或 fgets
不可用。当前有很多堆栈溢出问题,例如: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
格式进行了一些扩展——尽管您可能不必为打印指针而烦恼。