gpt4 book ai didi

linux - kmalloc : only allocating 4 bytes

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:21:10 25 4
gpt4 key购买 nike

所以我试图在模块初始化时动态分配缓冲区。缓冲区需要始终在范围内,因为它存储用户空间程序与之交互的数据。所以这是我的代码:

static char* file_data
#define MAX_SIZE 256
.
.
.
{
file_data = kzalloc(MAX_SIZE, GFP_KERNEL)

.
.
.
}

但是,当我执行 sizeof file_data 时,它总是返回 4。我做错了什么?

编辑:缓冲区存储来自用户空间程序的输入,但只能存储 4 个字符。

size_t read_file(char* __user buf, size_t count)
{
unsigned int len = 0;
len = copy_to_user(buf, file_data, count);
return count;
}

ssize_t write_file(char* __user buf, size_t count)
{
if(count >= MAX_SIZE)
return -EINVAL;
copy_from_user(file_data, buf,count)
return count;
}

最佳答案

file_data 是一个指针。在 32 位平台上,它的大小为 32 位或 4 个字节。你想知道的是 file_data 指向的数据的大小。您不能为此使用 sizeof 运算符,因为 sizeof 是编译时操作。您不能在运行时动态分配的事物上使用它。

(此外,您已经知道file_data 指向的数据的大小——它是MAX_SIZE?)

关于linux - kmalloc : only allocating 4 bytes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10725777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com