97. 바이너리로 파일 입출력

전문가) 이번에는 바이너리로 파일 입출력 함수 fread, fwrite 를 배워보자. 이 함수를 사용하면 메모리 덤프하여 내용 그대로 파일 입출력하지. 학생1) 그럼 메모장에서 보면 깨져 보일 수 있겠네요.

이번에는 메모리를 덤프하는 입출력 함수를 살펴볼게요.

메모리를 덤프하는 입출력 함수는 내용을 그대로 파일 입출력하는 함수들이예요.
메모리 덤프하는 입출력 함수는 fread와 fwirte 함수가 있어요.
두 함수는 입출력 방향이 메모리에서 파일스트림과 파일스트림에서 메모리라는 점이 다를 뿐이며 함수 원형이 같아요.

두 함수의 입력 인자는 data를 읽거나 쓸 buf의 주소, 요소 크기, 요소 개수, 파일 스트림이예요.
그리고 반환 값은 입출력한 요소 개수를 반환해요.
만약 파일에 있는 내용이 요청한 개수보다 작으면 요청한 개수보다 반환 값이 작을 수 있어요.

회원 관리 프로그램을 예로 들어볼게요.
프로세스가 종료하기 전에 회원 데이터를 저장하고 시작할 때 저장한 회원 데이터를 로딩한다고 가정할게요.
회원 데이터를 배열로 관리한다면 fwrite 한 번 호출로 배열에 있는 전체 회원 정보를 파일에 저장할 수 있어요.
그리고 로딩도 fread 한 번 호출로 가능해요.

다음은 회원 구조체를 원소로 하는 배열을 파일에 쓰고 읽어오는 것을 테스트 하는 코드예요.

◈ 회원 구조체를 원소로 하는 배열을 파일에 쓰기 및 읽기 테스트

◈ 실행 화면

 

fwrite 함수를 이용하여 출력한 후에 메모장 프로그램으로 내용을 확인하면 이상한 값이 쓰여진 것처럼 보여요.
메모장 프로그램은 ASCII 문자로 읽어와서 출력하는 프로그램이여서 그렇게 보이는 거예요.
만약 출력한 내용을 다른 프로그램으로 확인하길 원한다면 ASCII 문자로 출력하는 함수를 사용하세요.
하지만 프로그램의 수행 중의 내용을 파일에 보관하고 다음 실행 시에 로드하여 사용할 목적이라면 메모리 덤프로 입출력하는 것이 보다 효과적이예요.


[C언어 무료 동영상 강의] 97. 바이너리로 파일 입출력