Core BSP 분석/리눅스 커널 핵심 분석
[리눅스커널] ssize_t와 size_t의 실체
AustinKim
2023. 5. 6. 21:01
ssize_t와 size_t 타입의 실체를 확인해보자.
아래 코드를 전처리 코드로 확인해볼까?
static ssize_t default_read_file(struct file *file, char __user *buf,
size_t count, loff_t *ppos)
{
return 0;
}
size_t 타입의 정체
먼저 size_t의 정체를 확인해보자.
280 # 55 "/root/src/kernel_src/linux/include/linux/types.h"
281 typedef __kernel_size_t size_t;
size_t 는 __kernel_size_t로 캐스팅 된다.
201 # 68 "/root/src/kernel_src/linux/include/uapi/asm-generic/posix_types.h"
202 typedef unsigned int __kernel_size_t;
__kernel_size_t 타입은 'unsigned int'로 타입으로 캐스팅된다.
정리하자.
size_t -> unsigned int
ssize_t 타입의 정체
이번에는 ssize_t 타입을 확인하자.
280 # 55 "/root/src/rachman_kernel_src/linux/include/linux/types.h"
...
282
283
284
285
286 typedef __kernel_ssize_t ssize_t;
ssize_t은 __kernel_ssize_t 타입으로 캐스팅된다.
201 # 68 "/root/src/rachman_kernel_src/linux/include/uapi/asm-generic/posix_types.h"
202 typedef unsigned int __kernel_size_t;
203 typedef int __kernel_ssize_t;
__kernel_ssize_t은 int 타입으로 캐스팅된다.
정리하면;
ssize_t -> int
마무리
이제 default_read_file() 함수를 볼 때,
static ssize_t default_read_file(struct file *file, char *buf,
size_t count, loff_t *ppos)
{
return 0;
}
다음과 같이 해석해보자.
static int default_read_file(struct file *file, char *buf,
unsigned int count, loff_t *ppos)
{
return 0;
}