1

そのため、モジュールの初期化時にバッファを動的に割り当てようとしています。バッファは、ユーザースペースプログラムが対話するデータを格納するため、常にスコープ内にある必要があります。だからここに私のコードがあります:

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;
}
4

2 に答える 2

4

file_dataポインタです。32 ビット プラットフォームでは、サイズは 32 ビットまたは 4 バイトです。知りたいのは、 が指すデータfile_dataのサイズです。コンパイル時の操作であるsizeofため、これには演算子を使用できません。sizeof実行時に動的に割り当てられたものには使用できません。

(さらに、 が指すデータのサイズは既に知っています。file_dataそれはMAX_SIZE?)

于 2012-05-23T18:32:38.287 に答える
3

char *file_datacharへのポインタです。明らかに 32 ビット システムを使用しているため、ポインタは 4 バイトです。コンパイラ ( を処理するsizeof) は、ポイントするために割り当てているメモリの量を知らないか気にしませんfile_data。ポインタのサイズを求めていることを知っているだけです (意図しているかどうかにかかわらず)。それが指すメモリのサイズが必要な場合は、自分で追跡する必要があります。

于 2012-05-23T18:34:51.017 に答える