여기에서 해당 기능을 수정하겠습니다.
size_t fread_buf( void* ptr, size_t size, FILE* stream)
{
return fread( ptr, 1, size, stream);
}
size_t fwrite_buf( void const* ptr, size_t size, FILE* stream)
{
return fwrite( ptr, 1, size, stream);
}
매개 변수에 대한 이론적 근거는 fread()
/fwrite()
는 K & R 사본을 오래 전에 잃어 버렸기 때문에 추측 만 할 수 있습니다. 아마도 Kernighan과 Ritchie가 바이너리 I / O를 수행하는 것이 객체 배열에서 가장 자연스럽게 수행 될 것이라고 생각했을 수 있다고 생각합니다. 또한 블록 I / O가 구현하는 것이 더 빠르거나 더 쉬울 것이라고 생각했을 수도 있습니다.
비록 C 표준 지정 fread()
및 fwrite()
측면에서 구현 될fgetc()
하고 fputc()
, 표준은 C가 K & R에 의해 표준 힘에 지정된 일을하지 원래 디자이너의 아이디어에 있었던 것으로 정의 된 후에도 오랫동안 존재로 온 것을 기억한다. K & R의 "The C Programming Language"에서 말한 내용이 언어가 처음 설계되었을 때와 같지 않을 수도 있습니다.
마지막으로 PJ Plauger가 fread()
"The Standard C Library"에서 말한 내용 은 다음과 같습니다.
는 IF size
(두 번째) 인수가 1보다 큰, 당신은 함수가도를 읽을 여부를 확인할 수 없습니다 size - 1
그것을보고하는 것 이상 추가 문자. 원칙적으로, 당신은 함수를 호출 더 낫다 fread(buf, 1, size * n, stream);
대신
fread(buf, size, n, stream);
기본적으로 그는 fread()
인터페이스가 손상 되었다고 말합니다 . 들어 fwrite()
내가 동의하지 않을 성명 - 그가 그 노트, "이 큰 단점이되지 않도록 쓰기 오류는 일반적으로 드물다".