我正在编写一个驱动程序,要求我清除所有分配为零的内存。memset
是一个用户空间函数,但我想知道内核是否提供了一个宏来帮助我做到这一点。
问问题
16757 次
3 回答
21
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()' :)
于 2013-03-29T17:37:49.810 回答
7
根据这个线程和在这里评论使用它的人,memset
可以在内核代码中使用。也许你只是忘了
#include <string.h>
于 2012-03-26T23:35:53.777 回答
1
我在我拥有的一本 Linux 驱动程序开发书中查找了它(它是德语,所以我将对它的基本内容进行松散的翻译),它给出了以下描述:
#include <asm/io.h>
void *memset(void *s, int c, size_t n);
用常量字节值填充
n
给定内存区域的第一个字节。如果要将内存映射 I/O内存的区域设置为常量值,则必须使用该函数。s
c
memset_io()
返回指向 的指针
s
。
进行更多调查...如果您查看<asm/io.h>
来源,您会发现:
#include <linux/string.h> /* for memset() and memcpy() */
...还有memset_io()
函数的定义,所以我想这应该是正确的#include
。
于 2016-02-06T23:44:35.787 回答