240 likes | 332 Views
C 언어 ( STS2008 -04). 7. Text Input/Output. Files. File( 파일 ) 하나의 단위로 취급하는 external data( 외부 데이터 ) 의 단위 C 에서 , 파일 (file) 은 디스크 파일에서 터미널 또는 프린터에 이르기 까지 어떤 것도 될 수 있음. Streams. Stream( 스트림 ) 데이터의 source 와 destination 은 file 이지만 , data 는 스트림 (stream) 을 통해 입력되고 스트림을 통해 출력된다. Streams.
E N D
C 언어 (STS2008-04) • 7. Text Input/Output
Files • File(파일) • 하나의 단위로 취급하는 external data(외부 데이터)의 단위 • C에서, 파일(file)은 디스크 파일에서 터미널 또는 프린터에 이르기 까지 어떤 것도 될 수 있음
Streams • Stream(스트림) • 데이터의 source와 destination은 file이지만, data는 스트림(stream)을 통해 입력되고 스트림을 통해 출력된다.
Streams • 스트림의 종류 • Text stream(텍스트 스트림) • 연속된 문자들로 구성되어 있다. • 라인(레코드) 단위로 분리 (\n) • Binary stream(이진 스트림) • 정수, 실수 등의 연속된 데이터 값들로 이루어져 있다. • Text stream과 달리 메모리에 표현된 것들을 변환없이 전송하므로 속도가 빠르다. • 스트림-파일을 처리하는 4단계 • 1) Creating a Stream • 2) Opening a File • 3) Using the Stream Name • 4) Closing the Stream
Streams • Creating a Stream • 스트림을 선언하면 스트림이 생성된다. • FILE 타입은 파일을 읽고 쓰는데 필요한 정보들을 갖고 있다. • FILE 뒤의 *(asterisk) • spData가 스트림의 주소를 갖고 있는 포인터변수임을 의미 • Opening a File • 특정 스트림과 파일을 연관 시킴 • 파일이 열리면파일과 프로그램 사이에서 정보가 교환될 수 있다. FILE* spData; FILE* fopen (const char * filename, const char * mode)
Streams • Using the Stream Name • 스트림을 생성한 뒤에는 대응하는 파일을 액세스 하기 위해 스트림 포인터(spData)를 모든 함수에서 사용 가능하다. • Closing the Stream • 파일과 스트림의 관계를 끊는다. fclose(FILE * stream)
Streams • System-Created Streams • C는 터미널(keyboard or monitor)과의 의사소통을 위해 표준 스트림(standard stream)을 제공한다. • 표준 스트림은사용자가 열거나 닫을 필요가 없다. • 운영체제에 의해서 자동으로 처리됨 • C는 키보드에서 데이터를 입력받고 모니터로 출력을 하기 위해서 표준 스트림을 사용하는 많은 표준 함수(standard function)를 갖고 있다. • ex)printf, scanf , etc. • stdin (standard input) • stdout (standard output) • stderr (standard error) < stdio.h >
Standard Library Input/Output Functions • standard input/output 함수들의 타입들 fopen( ), fclose( ) fscanf( ), fprintf( ) getc / fgetc( ), putc / fputc( )
파일 처리에 관련한 여러 함수들 • ANSI C 파일 시스템은 여러 가지 상호 연관된 함수들로 구성
파일의 열기 • 파일의 열기와 닫기 • 파일 열기 • 파일을 열기 위해선 fopen함수를 쓴다. • filename : 파일의 이름과 경로 정보를 지니는 문자열 • mode : 파일을 어떻게 사용할 것인지를 C에게 알려주는 문자열 파일의 특징 및 용도를 결정짓는다 • 파일명만 전달하는 경우, 현재 디렉토리에서 전달된 이름의 파일을 찾아서 개방한다. fopen(“filename”, “mode”);
파일의 열기 • 파일 열기의 결과
파일 처리 모드 • 파일처리모드 종류와의미
파일 처리 모드 • 파일 처리 모드
파일의 닫기 • 파일 닫기 • 파일이 더 이상 필요 없을 시에는 파일을 닫아주고 buffer space와 같은 resource를 시스템에 돌려주어야 한다. • 파일에 대한 쓰기, 읽기 등의 작업이 종료된 후, fclose()로 파일을 닫아주는 것이다. • 해당 파일을 성공적으로 닫았을 때는 0을 리턴, 오류가 발생하면 -1을 리턴한다. FILE* fp; // 파일포인터 변수 int res; // fclose 함수의 리턴값 저장 fp = fopen(“a.txt”, “r”); // 파일 개방 … res = fclose(fp); // 파일 종결 if(res != 0) { printf(“파일이 닫히지 않았습니다.\n”); return 1; }
파일의 열기와 닫기 에러 • 파일의 열기와 닫기 에러 • 파일을 열 때 • 열려고 하는 파일이름이 디스크에 존재하지 않을 때 • 새로운 파일을 생성할 공간이 디스크에 없을 때 • 실패할 경우 스트림 포인터 변수는 NULL값을 갖게 된다. • 파일을 닫을 때 • fclose함수는 파일이 성공적으로 닫히면 0을리턴한다. • 에러가 있을 경우 EOF를 리턴한다. • if문을 사용하여 항상 파일이 성공적으로 열리고 닫혔는지 확인한다.
파일의 열기와 닫기 • 예제 프로그램–파일 열기와 닫기 Test.txt 생성
Formatting Input/Output functions • Formatting functions
파일 입력 함수 • fscanf • scanf와 기능이 거의 같지만 scanf는 표준입력(터미널 입력)에 사용되는 반면 fscanf는 파일로 부터의 입력에 사용된다. • fscanf는 리턴 값으로 정상적으로 할당된 숫자를 반환한다. • fscanf ( sp, “format string”, address list )
파일 출력 함수 • fprintf • fprintf는 printf와 기능은 거의 같지만 printf가 표준 출력(터미널 출력)에 사용되는 반면 fprintf는 파일로의 출력에 사용된다. • ex) fprintf (spReport, “\nWelcome to calculator.\n”); fprintf (spReport, “\nThe answer is %6.2f\n”, x); • fprintf ( sp, “format string”, value list )
Formatting Input/Output functions • fprintf와 fscanf를 사용한 예제 a.txt b.txt David 25 187.5 187.5 25 David Luis 28 173.2 173.2 28 Luis Bill 20 185.4 185.4 20 Bill
Character Input/Output Functions • Character input functions • 텍스트 스트림으로부터 한번에 한 글자씩 읽는다. • Character output functions • 텍스트 스트림에 한번에 한 글자씩 쓴다.
Character Input/Output Functions • Read a Character • getchar : 표준 입력 스트림으로부터 한 글자를 읽고 값을 반환한다. • getc and fgetc : 파일 스트림으로부터 다음 글자를 읽은 뒤 정수로 변환한다. ex)nextChar = fgetc (spMyFile); • int getchar (void); • Int fgetc (FILE* spIn); 스트림 파일의 버퍼 하드디스크의 파일 apple fgetc 함수 apple 한 문자만 가져간다. fgetc 함수가 처음 호출될때 이미 모든 데이터는 버퍼에 저장된다.
Character Input/Output Functions • Write a Character • putchar: 모니터에 한 글자를 쓴다. • putc and fputc: 파일 스트림에 한 글자를 쓴다. ex)fputc (oneChar, spMyFile); • int putchar (int out_char); • Int fputc (int oneChar, FILE* spOut); 스트림 파일의 버퍼 하드디스크의 파일 a p p l e \n apple fputc 함수 버퍼에 \n이 입력되면 모든 데이터가 한번에 출력 호출될 때마다 한 문자씩 버퍼에 출력
Character Input/Output Functions • fgetc와 fputc를 사용한 예제