我正在编写一个驱动程序,要求我清除分配给零的所有内存。 memset
是一个用户空间函数,但我想知道内核是否提供了一个可以帮助我做到这一点的宏。
答案 0 :(得分:16)
中的
memset()
是真的
include <string.h >
不应该出现在内核代码中。事实上,在驱动程序开发过程中追踪memset()
的位置可能会花费很多。实际上memset()
在
#include<linux/string.h>
它说:
#ifndef __KERNEL__
#include <string.h>
#else
/* We don't want strings.h stuff being used by user stuff by accident */
希望这有助于您100%确定地输入'memset()':)
答案 1 :(得分:7)
根据this thread以及此处评论使用过的人,memset
在内核代码中可用。也许你只是忘了
#include <string.h>
答案 2 :(得分:1)
我在一本Linux驱动程序开发书中查了一下(它是德语,所以我会给出它基本上所说的内容的松散翻译)并且它给出了以下描述:
#include <asm/io.h>
void *memset(void *s, int c, size_t n);
使用常量字节值
n
填充s
的给定内存区域的前c
个字节。如果要将memory mapped I/O内存的区域设置为常量值,则必须使用memset_io()
函数。返回指向
s
的指针。
进行更多调查......如果您查看<asm/io.h>
来源,可以找到:
#include <linux/string.h> /* for memset() and memcpy() */
...还有memset_io()
函数的定义,所以我猜这应该是正确的#include
。