Q & A

파일을 열 때 기본 모드는 무엇인가요?

fopen 함수로 파일을 열 때 't' (텍스트 모드)나 'b' (바이너리 모드)를 지정하지 않으면 텍스트 모드로 엽니다. 즉, 텍스트 모드가 기본 모드입니다.

FILE *fp = fopen("hello.bin", "w");    // 기본 모드는 텍스트 모드

만약 파일에 구조체를 저장한다면 반드시 "wb", "rb"와 같이 바이너리 모드를 확실히 지정해주어야 합니다.

파일 읽기에 실패해도 값을 읽어오던데요?

예를 들어 파일의 크기가 15바이트일 때 fread 함수에 읽기 크기는 10, 읽기 횟수는 2로 지정하여 파일을 읽으면 반환값은 1이 나옵니다. 하지만 buffer에는 15바이트만큼 파일을 읽은 값이 잘 들어가 있습니다.

size_t count = fread(buffer, 10, 2, fp);    // 읽기 크기는 10, 읽기 횟수는 2

왜냐하면 fread, fwrite함수의 성공 여부는 읽기/쓰기 크기에 지정한 값을 기준으로 하기 때문입니다. 15바이트 크기의 파일을 10바이트만큼 2번 읽어서 버퍼에 저장하면 첫 번째 읽기는 10바이트만큼 읽고 두 번째 읽기는 5바이트만큼 읽게됩니다. 첫 번째 읽기는 지정된 읽기 크기 10과 같으므로 성공(1), 두 번째 읽기는 지정된 읽기 크기 10보다 작으므로 실패(0)로 판정하여 최종적으로 1을 반환하게 됩니다(1 + 0 = 1).