fread(), fwrite() 에서 size, nmemb 의 의미는?
글쓴이: mithrandir / 작성시간: 월, 2004/09/20 - 4:13오후
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
함수 정의는 위와 같습니다.
Quote:
The function fread reads nmemb elements of data, each size bytes long,
from the stream pointed to by stream, storing them at the location
given by ptr.The function fwrite writes nmemb elements of data, each size bytes
long, to the stream pointed to by stream, obtaining them from the loca-
tion given by ptr.
그리고 설명은 이와 같습니다. size 크기만큼의 덩어리를 nmemb 갯수만큼 읽는 다는 의미로 이해했습니다. 그런데 실제 내부 구현을 보면,
size_t fread (p, size, nmemb, stream) void *p; size_t size; size_t nmemb; register FILE *stream; { register char *ptr = (char *) p; register size_t to_read = size * nmemb; size_t bytes = to_read; . . 중략 . . return (bytes - to_read) / size; }
이고, 실제로 nmemb나 size를 직접 사용하는 부분이 없습니다. return값만 size가 몇개 읽어졌나를 반환하는 셈이지요. 여기서 궁금해졌습니다. size와 nmemb 를 다르게 해서 반환값이 바뀌는 것은 함수를 부르고 나서도 간단히 얻을 수 있는 값인데요. 어째서 size, nmemb 를 구분하는 것일까요?
역사적인 이유라도 있는 것일까요?
Forums:
잘 모르겠습니다.... 만... (아~ 이런 전제를 할수밖에 없는 초보
잘 모르겠습니다.... 만... (아~ 이런 전제를 할수밖에 없는 초보 -,-;;; )
malloc에서 sizeof와 count를 곱해서 메모리할당하고,
calloc에서는 각각의 인자를 받아서 처리하는 차이가 아닐까요?
만약에 두개를 합쳐서 쓰고 싶으면 그냥 write함수를 이용하시면 되지 않을까요?
fread, fwrite는 정형화된 structure단위로 읽고 쓰기 편
fread, fwrite는 정형화된 structure단위로 읽고 쓰기 편하게 되어있습니다.
예를 들어 파일의 각 line이
이름 학번 주소
위와 같이 되어 있다면
위와 같이 structure등을 다룰 때는 read나 write를 쓰는 것보다
훨씬 간단함을 알 수 있습니다.
댓글 달기