인프런 커뮤니티 질문&답변

강진성님의 프로필 이미지
강진성

작성한 질문수

홍정모의 따라하며 배우는 C언어

14.14 구조체 파일 입출력 연습문제

바이너리 파일 입출력하는 부분이 잘 이해가 안가요ㅠㅠ

작성

·

49

·

수정됨

1

이 강의에서 나온 3가지 버전에서 동작을 보면 구조체를 초기화한 내용을 텍스트 파일 안에 저장하고, 텍스트 파일의 내용을 변경하여 다시 읽어들인 다음에 콘솔창에 출력하는 것으로 이해했습니다. 이중포인터를 사용하는 부분은 잘 이해하진 못했지만 구조체 포인터로 하는 부분은 구현도 했구요. 근데 바이너리 파일의 경우에는 단순히 읽거나 쓰는 용도로 사용하는 것이지 별도의 파일 편집기로 내용을 수정하기가 거의 불가능하다고 생각하고 있었는데 제 생각이 틀린걸까요? 그냥 교수님이 쓰신 코드를 따라 쳐봤지만 이게 무슨 의미를 가지는 것인지 잘 이해가 안갑니다... 바이너리 파일 입출력을 사용하는 경우 read_books 함수의 사용처가 뭔가요?

답변 1

1

안녕하세요? 질문&답변 도우미 Soobak 입니다.

 

좋은 궁금증이시네요.

우선, 파일 입/출력 과정에서 텍스트 스트림 입/출력과 바이너리 스트림 입/출력의 차이점에 대해서 점검해보시면 도움이 되실 것 같습니다.

바이너리 파일 입출력은 텍스트 입출력보다 일반적으로 더 빠르고, 공간 효율적이며, 데이터의 정확한 비트 표현을 유지하는 데이터 무결성 등등 많은 장점들이 있습니다.
교수님께서 강의 중 자주 언급해주신 것처럼, 이러한 장점들로 인하여 실무에서는 텍스트 파일 보다는 바이너리 파일을 주로 다루게 됩니다.

하지만, 말씀해주신 내용처럼 바이너리 파일은 파일 편집기를 통해서 직접 편집하거나 사람이 살펴보는 것이 어렵습니다.

(이 부분은 강의 13.1 파일 입출력의 작동 원리5:00 부분부터의 교수님 설명을 참고해보시면 도움이 되실 것 같습니다. 만약, 여유가 되신다면 해당 섹션의 강의들을 복습해보시는 것도 추천 드립니다. 특히, 해당 섹션의 마지막 강의 13.8 텍스트 파일을 바이너리 처럼 읽어보기 까지 다시 한 번 훑어 보신다면, 질문자님께서 현재 학습 진도까지 얻으신 지식들을 바탕으로, 처음 학습하실 때 보다 더 많은 것들이 보이고 여러 개념들을 더 잘 연결지어서 이해하실 수 있을 것 같습니다.)

 

따라서, 궁금해하시는 read_books() 함수를 포함하여, 해당 강의의 write_books() 함수, print_books() 함수 등으로 '바이너리 파일' 의 데이터를 읽어들이고, 콘솔 창에 데이터를 출력해보고, 수정하는 프로그램을 구성하여 '바이너리 파일' 을 다루는 것입니다.

예를 들어, read_books() 함수 내에서 fopen() 함수의 두 번째 인수 "rb""b" 는 바이너리 모드로 파일을 열겠다는 의미로 사용됩니다.

강진성님의 프로필 이미지
강진성

작성한 질문수

질문하기