Chapter 12 파일 입출력
01. 입출력의 개요 입출력 프로그램에서 무엇인가 나가면 출력이고 무엇인가 들어오면 입력 하드웨어적으로 보자면 프로그램은 메모리에서 실행되므로 메모리에서 무엇인가 나가면 출력이고 무엇인가 들 어오면 입력 입출력 장치 입력장치 : 키보드, 하드디스크에 있는 파일, 슈퍼마켓에서 사용하는 바코드 리더기 등 출력장치 : 모니터, 하드디스크에 저장되는 파일, 프린터 등
01. 입출력의 개요 입출력은 하드웨어를 제어하는 복잡한 과정이므로 대부분의 프로그래밍 언어는 입출력을 지원하는 라이브러리 함수(전문가가 개발)를 제공 C 언어는 다양한 입출력장치 중에서 가장 대표적인 키보드와 모니터에 의한 입출력을 표준 입출력으로 정의 지금까지의 많은 예제에서는 표준 입출력 함수를 사용 표준 입출력은 프로그램이 수행되면서 처리되지만 프로그램이 종료되면 입출력의 결과가 사라진다
01. 입출력의 개요 파일 입출력 C 언어는 파일 입출력 함수를 라이브러리 함수로 제공 프로그램에서는 오늘 처리한 결과를 파일에 저장하고 다음번에 그 파일로부터 결과를 읽어들여 처리 C 언어는 파일 입출력 함수를 라이브러리 함수로 제공
02. 파일 포인터 파일로부터 데이터를 입력받고 파일에 데이터를 출력하려면 다음과 같이 파일을 열고, 파일의 입출력을 수행한 뒤, 파일을 닫는 일련의 과정이 필요합니다. 파일 포인터file pointer : 입출력 할 파일을 가리키는 포인터 C 언어는 파일 포인터를 위한 구조체 FILE을 <stdio.h>에서 제공 FILE 구조체 변수를 선언하고 이 변수로 fopen(), fclose() 함수 사용
02. 파일 포인터 fopen() 함수 fclose() 함수 사용 예 fclose() 함수는 fopen() 함수로 개방되어 사용된 파일을 닫는다. 파일에 입출력을 위한 통로 폐쇄 사용 예
02. 파일 포인터 fopen() 함수에서 지정되는 파일의 모드 파일로부터 단순하게 데이터를 입력받는 경우에는 읽기 전용으로, 파일에 데이터를 출력하는 경우에는 쓰기 전 용으로 지정하여 사용 파일에 데이터를 입출력할 때 용도에 적합한 모드로 지정하는 것이 좋다. 적합한 모드의 지정은 파일을 잘못 사용하는 것을 막을 수 있는 방법
02. 파일 포인터 예제 12-1
03. 텍스트 파일의 입출력 – 3.1 문자 단위 입출력 함수 문자 단위의 입출력 함수 : 하나의 문자를 파일에 읽고 쓰기 위한 함수 이 함수는 파일을 대상으로 입출력하는 것을 제외하고는 3장에서 설명한 getchar(), putchar() 함수와 같다 이 함수는 파일 포인터가 가리키는 파일로부터 하나의 문자(바이트)를 unsigned char형으로 읽어서 int 정수 형으로 반환 프로그램에서는 반환되는 정수형을 char형으로 치환하여 사용 읽은 문자가 파일의 마지막인 경우에는 -1을 의미하는 EOF(‘end of file’을 줄인 말로 -1 값을 가짐)를 반환 이 함수는 매개변수로 지정된 char 값(문자)을 파일 포인터가 가리키는 파일에 출력 이 함수의 반환 값은 출력된 문자. 출력이 실패하는 경우 EOF를 반환
03. 텍스트 파일의 입출력 – 3.1 문자 단위 입출력 함수 예제 12-1
03. 텍스트 파일의 입출력 – 3.2 행 단위 입출력 함수 행 단위 입출력 함수 : 파일에 행 단위 문자열을 읽고 쓸 수 있는 함수 이 함수는 파일 포인터가 가리키는 파일로부터 문자열을 읽어 str로 반환 length는 읽을 문자열의 최대 길이를 의미 이 함수는 한 행이 끝나거나, length의 길이만큼 읽었거나, 파일의 끝에 도달하면 그때까지의 문자열을 반환 문자열을 읽을 수 없을 경우 NULL 값을 반환 이 함수는 매개변수로 지정된 문자열을 파일 포인터가 가리키는 파일에 출력 이 함수는 출력이 성공하면 음수가 아닌 값을 반환하고, 실패하면 EOF를 반환
03. 텍스트 파일의 입출력 – 3.2 행 단위 입출력 함수 예제 12-3
03. 텍스트 파일의 입출력 – 3.3 형식 지정 함수 형식 지정 함수 : 형식을 지정하여 파일에 데이터를 읽고 쓰기 위한 함수 이 함수는 파일을 대상으로 입출력하는 것을 제외하고는, 지금까지 표준 입출력으로 사용한 scanf(), printf() 함 수와 같은 방식으로 동작 이 함수에서 사용하는 형식 지정자는 scanf(), printf()에서 사용하는 형식 지정자와 같다 이 함수는 파일 포인터가 가리키는 파일로부터 지정된 형식으로 입력 입력받은 데이터는 input_list의 항목에 저장 이 함수는 입력이 정상적으로 완료되면 입력된 항목의 개수를 반환하고, 오류가 발생하면 EOF를 반환 이 함수는 파일 포인터가 가리키는 파일에 지정된 형식으로 데이터를 출력 output_list의 항목이 지정된 형식으로 파일에 저장 이 함수는 출력이 정상적으로 완료되면 출력된 바이트 수를 반환하고, 오류가 발생하면 음수를 반환
03. 텍스트 파일의 입출력 – 3.3 형식 지정 함수 예제 12-4
04. 2진 파일의 입출력 – 4.1 2진 데이터 입출력 함수 C 언어는 컴퓨터가 처리하는 2진 데이터를 처리하는 fread()와 fwrite() 함수 제공 이 함수는 filepointer가 가리키는 파일로부터 size 크기의 데이터를 count로 지정된 개수만큼 읽어들여 buf 로 지정된 공간에 저장 입력이 수행되면 파일의 현재 위치(파일 내에서 읽어들이는 위치)는 입력된 크기만큼 뒤로 이동
04. 2진 파일의 입출력 – 4.1 2진 데이터 입출력 함수 이 함수는 buf에 저장된 size 크기의 데이터를 count로 지정된 개수만큼 filepointer가 가리키는 파일에 출력 출력이 수행되면 파일의 현재 위치(파일 내에서 읽어들이는 위치)는 입력된 크기만큼 뒤로 이동 교재 488페이지 위에서 둘째 줄 “입력이 수행되면 => 출력이 수행되면”으로 수정 요망
04. 2진 파일의 입출력 – 4.1 2진 데이터 입출력 함수 2진 파일을 개방하기 위한 fopen() 함수의 모드 텍스트 파일을 개방하기 위한 모드와 유사하다. 텍스트 모드 끝에 b를 붙여 사용
04. 2진 파일의 입출력 – 4.1 2진 데이터 입출력 함수 예제 12-5
04. 2진 파일의 입출력 – 4.1 2진 데이터 입출력 함수 예제 12-6
04. 2진 파일의 입출력 – 4.2 임의 접근 함수 임의 접근random access : 파일의 중간부터 데이터를 입출력 하는 방법 이 방법을 이용하면 파일의 중간에 빠르게 접근하여 효율적인 프로그램을 작성 가능 파일 포지션file position 2진 파일에 접근할 때 순차 접근 방법이든 임의 접근 방법이든 파일의 현재 위치를 나타내는 파일 포지션file position 이 존재 즉 2진 파일로부터 데이터를 읽어올 때 현재의 파일 포지션부터 데이터를 읽고, 2진 파일에 데이터를 쓸 때도 같은 형태로 동작
04. 2진 파일의 입출력 – 4.2 임의 접근 함수 파일 포지션을 이동할 수 있는 fseek() 함수 이 함수는 origin을 기준으로 offset으로 지정된 바이트 수만큼 파일 포지션을 이동 origin으로 지정되는 기준점은 상수로 정의된 SEEK_SET, SEEK_CUR, SEEK_END 중 하나
04. 2진 파일의 입출력 – 4.2 임의 접근 함수 예제 12-7
04. 2진 파일의 입출력 – 4.2 임의 접근 함수 예제 12-7 계속