90 – 파일 입출력 함수

표준 입출력을 통한 방식 이외에도 파일을 통한 데이터의 입력 및 출력이 있을 수 있다. 파일을 통해 입출력을 하기 위해서는 사용하고자 하는 파일을 열어야 하는데 이 때 사용하는 함수가 fopen, 사용이 끝난 파일은 닫아줘야 하는데 이 때 사용하는 함수가 fclose이다.

  • 함수 이름 | 의미
  • fopen | 파일을 연다
  • fclose | 파일을 닫는다

파일을 열 때에는 여는 파일에 대해서 어떠한 형태로 사용할지를 나타내줘야 한다. 그래서 fopen 함수는 두 번째 인수로 어떤 형태로 사용할지를 적어줘야 하는데, 적어주는 인수값과 의미가 다음과 같다.

  • 인수값 | 의미
  • r | 읽기 전용. 파일 존재해야 함.
  • w | 쓰기 전용. 파일이 없어도 되며, 만약 이미 존재한다면 기존 내용이 지워짐.
  • a | 추가용. 파일이 없어도 되며, 만약 임미 존재한다면 기존 내용 뒤에 추가됨.
  • rb | 바이너리 파일의 읽기 전용.
  • wb | 바이너리 파일의 쓰기 전용.
  • ab | 파이너리 파일의 추가용.
  • r+ | 읽기와 쓰기용.
  • w+ | 쓰기와 읽기용.
  • kyuling이라는 파일을 읽기 전용으로 사용하기 위해서는 다음과 같이 작성하면 된다. 대신 쓰기 작업을 할 수 없게 된다.

fopen(“kyuling”, “r”);

게다가 한 프로그램에서 동시에 열어서 사용할 수 있는 파일의 수는 제한적이다. 따라서 사용이 끝난 파일은 닫아주는 것이 바람직하다. fclose를 이용하여 닫으면 된다.

FILE *file;
file = fopen(“kyuling”, “w”);
fclose(file);

예제를 만들어서 진행해 보았다. 예제를 따라할 때, 파일이 없을 경우에는 리눅스의 touch 명령어를 이용하여 빈 파일을 만들어서 실습을 진행하면 된다. 소스 코드 밑에 실행하던 예시 명령어를 그대로 순차적으로 찍었다. 파일이 없으면 어떻게 되는지 보여주기 위해서이다.

스크린샷 2017-05-06 오후 4.08.49스크린샷 2017-05-06 오후 4.09.18스크린샷 2017-05-06 오후 4.09.56

이제는 파일을 통해 한 문자를 입출력하는 함수를 살펴보겠다. getchar와 putchar와 같이 한 문자만을 받아오는 함수가 존재했다. 파일 입출력에도 그와 마찬가지인 파일 입출력이 존재한다.

  • 함수 이름 | 기능
  • fgetc | 파일을 통해 한 문자를 입력받는다.
  • fputc | 파일에 한 문자를 출력한다.

이 함수의 사용법 또한 예제를 확인해보자. touch로 만든 파일을 vi를 이용해서 안에 내용을 입력하면 이미 데이터가 있는 파일을 만들 수 있다. 파일 내용을 확인 하기 위해 cat 명령어를 이용하여 직접 결과 파일을 확인해보았다.

스크린샷 2017-05-06 오후 4.10.31스크린샷 2017-05-06 오후 4.11.05스크린샷 2017-05-06 오후 4.11.37

서식을 갖춘 데이터의 입출력 또한 파일 입출력 함수에도 존재한다.

함수 이름 | 기능

fscanf | 파일을 통해 서식을 갖춘 데이터를 입력받는다.

fprintf | 데이터를 서식화하여 파일로 출력한다.

예시 코드로 확인하면 쉽게 확인할 수 있다. 전체적인 구조는 비슷한 편이다. 문자열을 저장했다가 단순히 읽어오는 프로그램이다.

스크린샷 2017-05-06 오후 4.12.41스크린샷 2017-05-06 오후 4.13.14

파일의 데이터를 대용량으로 처리해야 할 일이 생길 수 있다. fread와 fwrite 함수를 통해 데이터를 한꺼번에 입출력을 하면 많은 데이터를 한번에 처리할 수 있다.

함수 이름 | 기능

fread | 파일을 통해 데이터를 한꺼번에 입력받는다.

fwrite  | 데이터를 한꺼번에 파일로 출력한다.

단순 예제라서 데이터는 얼마 없지만, buffer로 데이터를 읽고 나서 그대로 파일로 출력하는 예제를 만들어보았다.

스크린샷 2017-05-06 오후 4.14.10스크린샷 2017-05-06 오후 4.16.07

마지막으로 읽어들인 문자를 파일로 되돌리는 함수가 있다. 문자열을 저장하고 있는 파일에서 특정 문자를 추출하고자 한다고 하면, 파일로부터 한 문자씩 읽다가 특정 문자를 읽으면 읽은 파일로부터 그대로 되돌리고 읽어야 한다. 그런 경우에 쓰는 함수가 ungetc 함수이다. (이건 왜 쓰는지 필자는 아직 잘 모르겠다. 옛날에 쓰는 사람들이 필요해서 만들었나보다 생각중임.)

함수 이름 | 기능

ungetc | 방금 읽은 문자를 파일로 되돌린다.

위에서 살짝 설명한 상황을 예시 코드로 작성해보았다. l 혹은 L을 만남녀 그 뒤부터 되돌려서 반환한다.

스크린샷 2017-05-06 오후 4.17.25스크린샷 2017-05-06 오후 4.17.46

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.