2012-05-23 4 views
1

그래서 동적으로 모듈을 초기화 할 때 버퍼를 할당하려고합니다. 버퍼는 사용자 공간 프로그램이 상호 작용하는 데이터를 저장하므로 항상 범위에 있어야합니다.kmalloc : 4 바이트 만 할당

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; 
} 
+0

"동적 할당"이 무엇인지 배우고 있습니다. 내 가정 컴파일러가 내게 크기 정보를 말할 수 있었다. 내가 틀렸어. 그래도 답변을 주셔서 감사합니다! :) – Nathan

답변

4

file_data은 포인터입니다. 32 비트 플랫폼에서 크기는 32 비트 또는 4 바이트입니다. 알고 싶은 것은 의 데이터이며, 데이터는 file_data입니다. sizeof은 컴파일 타임 작업이므로 sizeof 연산자를 사용할 수 없습니다. 런타임에 동적으로 할당 된 항목에는 사용할 수 없습니다.

은 (게다가, 당신은 이미 데이터의 크기가 file_data가 가리키는 알 - 그것은 MAX_SIZE입니까?)

3

char *file_data은 문자에 대한 포인터입니다. 분명히 32 비트 시스템을 사용하고 있으므로 포인터는 4 바이트입니다. (sizeof을 처리하는) 컴파일러는 file_data에 할당 할 메모리의 양을 모르고 있거나 신경 쓰지 않고 포인터의 크기를 묻는 것을 알고 있습니다.). 그것이 가리키는 메모리의 크기를 원한다면, 스스로 추적해야합니다.

관련 문제