91 – 기타 입출력 함수

이 외에도 입출력에 관한 여러 함수들이 존재한다. 그 중에서도 좀 알아두면 유용할 것 같은 함수들을 정리해보겠다.

파일의 경우에는 읽고 쓰는 도중에 오류가 발생할 수 있는데, 이런 오류 함수들을 알아두면 좋을 거 같다. 파일로부터 더 이상 읽을 데이터가 없는지 또는 파일에 대한 동작이 제대로 이루어졌는지에 대한 점검을 쉽게 해주는 파일 오류 관련된 함수들이 존재한다.

파일 오류와 관련된 함수들로는 eof(end of file)인지, 파일 자체 오류인지, 오류 정보와 끝 정보를 초기화하는 그런 작업이 필요하다.

  • 함수 이름 | 기능
  • feof | 파일의 끝인지 확인한다.
  • ferror | 파일이 오류인지를 확인한다.
  • clearerr | 파일의 끝과 오류 정보를 초기화한다.

이런 함수 사용의 예시를 한번에 몰아서 작성해봤다. 읽기 전용 파일에 데이터를 쓰려고 하면 오류가 발생, 그 다음에 오류가 확인되고, 오류 정보를 clearerr를 사용해서 해제하는 예시를 작성하였다. 전체적인 흐름을 확인할 수 있어야 한다.

스크린샷 2017-05-06 오후 4.18.39스크린샷 2017-05-06 오후 4.18.54

또한 파일을 읽고 쓰는 데 있어서도 처음부터 줄줄이 다 읽을 수는 없다. 주문형 비디오 서비스(VOD)를 예로 들어보자. 사용자가 원하는 부분 혹은 이전에 보던 부분에서 이어보기를 제공해 주는데, 이를 위해서는 특정 위치에서 읽을 수 있도록 해주기 때문이다. 파일 입출력에는 이런 기능들이 들어있고, 오래전부터 사용하던 C언어 또한 이런 입출력 함수를 가지고 있다.

  • 함수 이름 | 기능
  • ftell | 파일의 읽기/쓰기 포인터 값을 구한다.
  • rewind | 파일의 읽기/쓰기 포인터를 처음으로 되돌린다.

source 파일에 “ABCDEF”라는 데이터가 있다고 할 때, 파일을 읽은 다음에 한 문자씩 읽어서 읽은 값의 포인터 위치를 출력하는 예제를 작성하였다. 두번의 과정을 거쳐서 첫번째로 읽은 값은 포인터의 배열 위치가 2가 되었고, 그 다음에 원래대로 되돌려서 0번(처음) 위치를 가리키고 있다.

스크린샷 2017-05-06 오후 4.19.38스크린샷 2017-05-06 오후 4.20.59

그리고 함수의 읽기/쓰기 포인터를 임의의 위치로 설정하는 함수 또한 존재한다. 어디를 기준으로 할 지에 대해서 특정 offset만큼 이동해서 처리할 수 있도록 해주는 것이다.

  • 함수 이름 | 기능
  • fseek | 파일의 읽기/쓰기 포인터를 임의의 위치로 설정한다.

이 함수의 두 번째 인수값이 offset 값인데, 의미가 있다.

  • whence | 의미
  • SEEK_SET | 파일의 시작
  • SEEK_CUR | 현재 읽기/쓰기 포인터 위치
  • SEEK_END | 파일의 끝

사용 예시를 보면 이 함수가 어떻게 이용되는지 알 수 있을 것이다. 시작 위치에서 우측으로 10칸 이동시킨 다음, 파일의 끝에서 읽어서 화면에 출력하는 예시이다.

스크린샷 2017-05-06 오후 4.21.25스크린샷 2017-05-06 오후 4.23.46

답글 남기기

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

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