【问题标题】:What is the Linux kernel equivalent to the memset function?相当于 memset 功能的 Linux 内核是什么?
【发布时间】:2012-04-10 12:02:09
【问题描述】:

我正在编写一个驱动程序,该驱动程序需要我将所有分配的内存清零。 memset 是一个用户空间函数,但我想知道内核是否提供了一个宏来帮助我做到这一点。

【问题讨论】:

  • 我相信memset 可用于 Linux 中的内核代码。
  • 好问题。我自己也担心这个。当您第一次处理内核代码时,您往往会陷入这样一种心态,即内核空间中没有用户空间中可用的东西。如果您尝试一下,您应该会看到它按预期工作。
  • @anthony:另一种方法是只看标题 :)

标签: c linux-kernel kernel driver memset


【解决方案1】:

根据this thread 和在这里评论使用它的人,memset 在内核代码中可用。也许你只是忘记了

#include <string.h>

【讨论】:

  • 同意,我以前在内核领域使用过它,它运行良好。
  • @anthony:感谢您提供的信息 :)
  • 嘿,谢谢,我只是假设因为它是一个 头文件,所以它链接到你不能在内核中执行的用户空间库。我试试看。
  • 大声笑,天哪,它有效,大声笑。这很奇怪,我想知道它包含在哪个头文件中......也许是 或其他东西。这很整洁。
【解决方案2】:

这是真的memset() in

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()' :)

【讨论】:

  • 目前不能用简单的#include &lt;string.h&gt;编译
【解决方案3】:

我在我的一本 Linux 驱动程序开发书中查找了它(它是德文的,所以我将对其基本内容进行粗略的翻译),它给出了以下描述:

#include <asm/io.h>
void *memset(void *s, int c, size_t n);

用常量字节值c 填充给定内存区域s 的第一个n 字节。如果要将memory mapped I/O 内存的区域设置为常量值,则必须使用memset_io() 函数。

返回一个指向s的指针。


做更多调查...如果您查看&lt;asm/io.h&gt; 来源,您可以找到:

#include <linux/string.h> /* for memset() and memcpy() */

...还有memset_io()函数的定义,所以我猜这应该是正确的#include

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2010-09-10
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多