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

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

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

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

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

함수 이름 | 기능

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

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

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

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

함수 이름 | 기능

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

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

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

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

함수 이름 | 기능

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

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

답글 남기기

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

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