slide1
Download
Skip this Video
Download Presentation
최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지

Loading in 2 Seconds...

play fullscreen
1 / 60

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지 - PowerPoint PPT Presentation


  • 254 Views
  • Uploaded on

최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지. 개정판. 11 장 : 파일 입출력 도서출판 - 인터비젼. 11 장 파일 입출력. 학습목표 1. 스트림과 파일 시스템을 이해한다 . 2. 파일 관련 표준 함수를 이해한다 . 3. 순차 파일과 이진 파일에 대해 이해한다 . 4. 표준 입출력 함수를 이해한다. 목차. 11 장 파일 입출력 예습시간 스트림과 파일 그리고 표준 입출력 파일 입출력 함수 실습시간 텍스트 파일 활용 이진 파일 활용 연습시간 파일 입출력 분석.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about ' 최신 C 프로그래밍 언어 문제해결에서 프로그래밍까지' - kathie


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
slide1

최신 C프로그래밍 언어문제해결에서 프로그래밍까지

개정판

11장 : 파일 입출력

도서출판 - 인터비젼

slide2
11장 파일 입출력
  • 학습목표
    • 1. 스트림과 파일 시스템을 이해한다.
    • 2. 파일 관련 표준 함수를 이해한다.
    • 3. 순차 파일과 이진 파일에 대해 이해한다.
    • 4. 표준 입출력 함수를 이해한다.
slide3
목차
  • 11장 파일 입출력
    • 예습시간
      • 스트림과 파일 그리고 표준 입출력
      • 파일 입출력 함수
    • 실습시간
      • 텍스트 파일 활용
      • 이진 파일 활용
    • 연습시간
      • 파일 입출력 분석
slide5
스트림과 파일 그리고 표준 입출력
  • 학습 개요
    • 외부장치와의 논리적인 흐름을 나타내는 스트림을 이해한다.
    • 스트림과 파일의 관계를 이해한다.
    • 표준 입/출력 함수들에 대해 다룬다.
slide6
스트림과 파일 그리고 표준 입출력
  • 스트림(Stream)과 파일(File)
    • 스트림(Stream)
      • 컴퓨터와 연결된 여러 주변장치와의 논리적인 흐름
      • 주변장치와 연결하는 접속 채널의 개념
      • 컴퓨터와 주변장치의 정보전달은 스트림을 통해 이루어짐
      • 모든 정보는 스트림을 통해 전달
    • 파일
      • C언어에서 파일은 모든 주변 장치를 포함한다.
        • 디스크에 저장된 파일
        • 디스플레이 화면
        • 키보드
        • 프린터
        • 직/병렬 포트
        • 테이프 등등…
slide7
스트림과 파일 그리고 표준 입출력
  • 스트림과 파일
    • 스트림과 파일의 관계
      • 스트림은 파일을 연결하기 위한 논리적인 접근 통로
      • 오픈된 스트림을 통해 정보를 전달하거나 받아들임
      • 스트림 사용을 위해서는 항상 오픈(Open) 되어야하고 사용 후 닫아(Close) 주어야 한다.
    • C언어에서 제공되는 표준 입/출력 장치
      • 키보드 : 표준 입력 장치
      • 디스플레이 화면 : 표준 출력 장치
    • 표준 스트림
      • 표준 입/출력 장치의 연결을 위해 사용되는 스트림
      • C 프로그램 시작시 자동적으로 오픈되어 사용 가능하다.
      • 종류
        • stdin : 표준 입력 스트림 (키보트와 연결된 스트림)
        • stdout : 표준 출력 스트림 (디스플레이 화면과 연결된 스트림)
        • stderr : 표준 에러 스트림 (디스플리이 화면과 연결된 스트림)
slide8
스트림과 파일 그리고 표준 입출력
  • 표준 입출력 함수
    • 표준 입/출력 스트림을 이용하는 함수
    • 표준 입/출력 함수 정의 헤더 파일
      • stdio.h
    • 표준 입출력 함수의 종류
      • 형식이 있는 입출력 함수 – printf(), scanf()
      • 단일 문자 입출력 함수 – getchar(), putchar()
      • 문자열 입출력 함수 – gets(), puts()
      • 버퍼형 입출력 함수 – sscanf(), sprintf()
slide9
스트림과 파일 그리고 표준 입출력
  • 단일 문자 입출력 함수
    • 단일 문자 입력 함수 – getchar()
      • 함수의 원형
        • int getchar()
      • 키보드로 부터 하나의 문자를 입력 받는다.
      • 리턴 결과
        • 정상적 수행 : 해당 문자에 대한 ASCII 코드 값
        • 비정상적 수행 : EOF 값 반환
    • 단일 문자 출력 함수 – putchar()
      • 함수의 원형
        • int putchar(int ch)
      • 화면에 ch에 해당되는 문자를 출력
      • 리턴 결과
        • 정상적 수행 : 입력된 값이 반환
        • 비정상적 수행 : EOF 값 반환
slide10
스트림과 파일 그리고 표준 입출력
  • 단일 문자 입/출력 함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03     char ch;
    • 04     printf("한문자 입력 :");
    • 05     ch = getchar(); // 한 문자 입력
    • 06     printf("입력받은 결과 출력 : ");
    • 07     putchar(ch);    // 입력받은 문자 출력
    • 08     putchar(\'\n\');   // 특수 문자 출력
    • 09 }
    • 출력 결과 : _______________

입력된 문자 출력

slide11
스트림과 파일 그리고 표준 입출력
  • 문자열 입출력 함수
    • 문자열 입력함수 – gets()
      • 함수의 원형
        • char *gets(char *str);
      • 키보드로 부터 입력된 문자열 값을 저장
      • *str : 입력된 문자열 저장 주소
      • 입력된 문자열은 키보드로부터 <Enter>키를 누른 위치까지 포함
      • 공백문자도 문자열에 포함됨
      • <Enter>값은 자동적으로 \'\0\'(NULL) 값으로 변경되어 저장됨
      • 반환 결과
        • 정상적일 경우 : 저장된 문자열의 주소
        • 비정상적일 경우 : EOF 값
slide12
스트림과 파일 그리고 표준 입출력
  • 문자열 입출력 함수
    • 문자열 출력함수 – puts()
      • 함수의 원형
        • int puts(char *str);
      • 입력된 문자열(*str)을 화면에 출력
      • 출력시 \'\0\' 값은 \'\n\'(Enter) 값으로 변형되어 출력
      • 반환 결과
        • 정상적일 경우 : 음이 아닌 값
        • 에러 발생 시 : EOF 값 반환
slide13
스트림과 파일 그리고 표준 입출력
  • 문자열 입출력 함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03     char buffer[80], *bp;
    • 04     printf("문자열 입력 : ");
    • 05     bp = gets(buffer); // 문자열 입력
    • 06     if(bp != EOF){  // 정상적인 입력 시
    • 07             puts("입력된 문자열");
    • 08             puts(bp); // 포인터를 통한 출력
    • 09             puts(buffer); // 배열을 통한 출력
    • 10     }
    • 11 }
    • 입력 값 : 안녕하세요 여러분
    • 출력 결과:_____________________
    •             :_____________________

안녕하세요 여러분

안녕하세요 여러분

slide14
스트림과 파일 그리고 표준 입출력
  • 버퍼형 입출력 함수
    • 형식을 가진 형태로 표준입출력 스트림이 아닌 문자열 변수공간(Buffer)에 값을 저장하거나 읽어올 때 사용
    • 버퍼형 입력 함수 – sscanf()
      • 함수의 원형
        • int sscanf(char *buffer, char *format [,argument ] ... );
      • buffer : 입력 데이터가 존재하는 문자열 주소
      • format : 형식지정문자를 포함한 문자열
      • argument : 값을 저장할 변수 리스트
      • 문자열로 저장된 데이터를 형식에 맞도록 추출할 목적으로 사용
slide15
스트림과 파일 그리고 표준 입출력
  • 버퍼형 입력 함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03     char  token[] = "128 14.8 language";
    • 04     int i;
    • 05     float f;
    • 06     char name[80];
    • 07     //문자열로부터 각각의 데이터 추출
    • 08     sscanf( token, "%d %f %s", &i,&f,name );
    • 09     //추출 내용 출력
    • 10   printf( "Integer = %d, Float = %f, String = %s\n", i,f,name );
    • 11 }
    • 출력 결과 : _________________________________________

128 14.8 language

slide16
스트림과 파일 그리고 표준 입출력
  • 버퍼형 출력함수 – sprintf()
    • 형식화된 문자열을 화면이 아닌 문자열 변수에 저장
    • 여러 데이터 유형을 문자열로 만들 때 유용
    • 함수의 원형
      • int sprintf(char *buffer, char *format [,argument] ... );
    • buffer : 출력할 문자열의 주소
    • format : 형식지정문자를 포함한 문자열
    • argument : 값을 저장하고 있는 변수 리스트
    • buffer에 출력된 문자열의 수 반환
slide17
스트림과 파일 그리고 표준 입출력
  • 버퍼형 출력함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main()
    • 03 {
    • 04     char  buffer[200];
    • 05     int i = 28,j;
    • 06     double d = 1.3456;
    • 07     char c=\'x\';
    • 08     char str[] = "c programming";
    • 09     j = sprintf(buffer,"i= %d, d = %f, c= %c \n",i,d,c);
    • 10     j = sprintf(buffer + j, "str = %s", str);
    • 11     puts(buffer);
    • 12 }
    • 출력결과 : __________________________________
    • ______________________________________

i= 28, d = 1.3456, c= x

c programming

slide19
파일 입출력 함수
  • 학습 개요
    • 일반 파일에 대한 처리 과정을 이해한다.
    • 파일 시스템과 파일 조작함수에 대해 다룬다.
    • 파일의 종류와 이 파일의 입출력 함수들에 대해 알아본다.
    • 파일의 임의 접근 방식에 대해 이해한다.
slide20
파일 입출력 함수
  • 파일 시스템의 개요
    • 파일에 데이터를 쓰거나 읽기 위해 스트림 형성이 필요
    • 파일에 스트림 형성 방법
      • 파일 포인터 이용
    • 파일 포인터
      • 파일을 가리키는 FILE 타입의 구조체
    • FILE 포인터를 이용한 파일 입출력 단계
      • 1. 파일 포인터 선언
        • FILE *fp; // fp는 파일 포인터 변수
      • 2. 파일 포인터를 이용해 파일 열기
        • fp = fopen(…); // 파일 오픈 후 그 파일에 대한 포인터 반환
      • 3. 파일에 대한 입/출력 처리
        • 파일 포인터 fp을 이용한 파일 입/출력 처리
      • 4. 파일 닫기
        • fclose(fp); // 사용 후 파일 포인터를 이용해 해당 파일 닫기
slide21
파일 입출력 함수
  • 파일 조작 함수
    • 파일 열기와 닫기
      • 파일 스트림의 연결과 닫기
      • fopen 함수
      • fclose 함수
    • 파일 검사
      • 입출력 과정에서 발생된 에러 확인
      • feof 함수
      • ferror 함수
    • 기타 파일 조작 함수
      • 파일의 제거 및 이름 변경
      • rename 함수
      • remove 함수
slide22
파일 입출력 함수
  • 파일 열기 (fopen 함수)
    • 함수의 원형
      • FILE* fopen(char *filename, char*mode);
        • filename : 파일의 이름
        • mode : 파일에 대한 접근 방법
        • 반환 값 : 파일에 대한 포인터 (FILE *)
  • mode의 종류
slide23
파일 입출력 함수
  • 파일 열기 (fopen 함수)
    • fopen의 정상적 수행 시 해당 파일의 포인터를 리턴 하지만 실패 시 NULL 값을 리턴
    • 파일 오픈 과정에서 에러 확인 필요
    • 사용 예>
      • 1      FILE *fp;
      • 2      ...
      • 3      fp = fopen("test.dat","r");
      • 4      if(fp == NULL){
      • 5              printf(" 파일오픈 실패 !“);
      • 6              exit(1);
      • 7      }
  • 파일 닫기 (fclose 함수)
    • 함수 원형
      • int fclose(FILE *fp);
    • 오픈된 파일은 사용 후 반드시 닫아야 한다.
    • 열려진 파일 포인터를 인지를 화여 fclose 함수 호출
slide24
파일 입출력 함수
  • 파일 입출력 과정
    • 파일 입출력 과정은 버퍼 공간을 통해 이루어진다.
    • 시스템에 의해 자동적으로 버퍼의 공간에 저장된 데이터 파일로 출력
    • 버퍼의 사용 목적
      • 두 시스템간의 완충 작용 ( CPU와 주변장치 사이)
      • 두 시스템 사이의 처리 속도 문제 해결
    • 필요에 따라 버퍼의 내용을 강제적으로 출력 하고자 할 경우에는 fflush 함수를 사용한다.
  • fflush 함수
    • 버퍼의 내용을 강제적으로 파일에 작성하고 버퍼 비우는 역할 수행
    • 함수의 원형
      • int fflush(FILE *fp);
        • fp : 오픈된 파일의 포인터
slide25
파일 입출력 함수
  • 파일 검사 함수 ( feof / ferror )
    • feof 함수
      • 파일의 끝에 정상적으로 도달 했는지의 여부 검사
      • 함수의 원형
        • int feof(FILE *fp);
        • 처리 결과
          • fp가 파일의 끝에 도달할 경우 : 0이 아닌 값
          • 그렇지 않을 경우 : 0
    • ferror 함수
      • 파일에 에러가 존재하는지의 여부 검사
      • 함수의 원형
        • int ferror(FILE *fp);
        • 처리 결과
          • 파일 처리 과정 중 에러 발생 시 : 0이 아닌 값
          • 그렇지 않을 경우 : 0
slide26
파일 입출력 함수
  • 기타 파일 조작 함수 ( rename / remove )
    • rename 함수
      • 파일의 이름을 변경
      • 함수의 원형
        • int rename(char *oldname, char*newname);
          • oldname : 변경할 파일 이름
          • newname : 새롭게 변경될 파일 이름
    • remove 함수
      • 해당 파일을 삭제
      • 함수의 원형
        • int remove(char*path);
          • path : 제거할 파일의 경로(이름)
    • 두 함수다 정상적 수행 후 결과 값을 0으로 그렇지 않을 경우 0이 아닌 값을 반환한다.
slide27
파일 입출력 함수
  • 텍스트 파일 입/출력 함수
    • 텍스트로 오픈된 파일의 조작함수
    • 단일 문자 입출력 함수
      • 함수의 종류
        • int getc( FILE *stream); // 스트림으로부터 한 문자 입력 매크로
        • int fgetc( FILE *stream); // 스트림으로부터 한 문자 입력 함수
        • int putc( int c,FILE* stream);   // 스트림에 한 문자 출력 매크로
        • int fputc( int c,FILE* stream);  // 스트림에 한 문자 출력 함수
      • 처리 결과
        • 정상적 수행
          • 해당 문자를 반환하고 파일 포인터를 1중가 시킴
        • 파일의 끝이거나 오류 발생
          • EOF(-1) 값 반환
slide28
파일 입출력 함수
  • 단일 문자 입출력 함수 사용 예
    • 01 #include <stdio.h>
    • 02 #include <stdlib.h> // exit()함수
    • 03 int main(){
    • 04     FILE *rfp, *wfp;
    • 05     char c;
    • 06     rfp = fopen("test.txt","r");
    • 07     if(rfp == NULL){
    • 08             printf("test.txt 파일이 존재하지 않습니다.\n");
    • 09             exit(1);
    • 10     }
    • 11     wfp = fopen("copy.txt","w");
    • 12     if(wfp == NULL){
    • 13             printf("copy.txt 파일생성이 오류 발생.\n");
    • 14             exit(1);
    • 15     }
    • 16     while((c=fgetc(rfp)) != EOF){
    • 17             fputc(c,wfp);
    • 18     }
    • 19     fclose(rfp);
    • 20     fclose(wfp);
    • 21     printf("text.txt 을 copy.txt파일로 복사 완료 되었습니다.\n");
    • 22     return 0;
    • 24 }
slide29
파일 입출력 함수
  • 문자열 입출력 함수 (fgets / fputs)
    • 텍스트 파일에 대한 문자열 입출력 제공
    • fgets()함수
      • 문자열 입력 함수
      • 입력 스트림으로부터 n-1개의 문자를 읽어 들여 문자열 변수에 저장
      • 문자열 입력 시 \'\n\'문자를 만나면 그때까지의 문자열을 저장
      • 문자열 마지막에 \'\0\'문자 자동 포함
      • 함수의 원형
      • char *fgets( char* string, int n, FILE *stream);
        • string  : 문자열 저장 버퍼
        • n      : 입력 최대 문자 수
        • stream  : 입력용 파일 포인터
        • 반환 값 : 파일의 끝이나 에러 발생시 EOF
        • 정상적일 경우 저장된 문자열의 주소
slide30
파일 입출력 함수
  • fgets() 함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03     FILE *stream;
    • 04     char line[30];
    • 05     if( (stream = fopen( "test.txt", "r" )) != NULL ){
    • 06             while( fgets(line, 30, stream ) != NULL){
    • 07                     printf( "line = : [%s]\n", line);
    • 08             }
    • 09             fclose( stream );
    • 10     }
    • 11 }
  • 입/출력 결과

실행 화면

test.txt 파일

slide31
파일 입출력 함수
  • fputs 함수
    • 문자열을 파일에 작성하기 위해 사용
    • 문자열을 파일로 출력할 때 문자열의 맨 마지막에 존재하는 \'\0\' (NULL)문자는 출력 되지 않는다.
    • 함수의 원형
      • int fputs( char *string, FILE *stream);
        • string  : 출력할 문자열
        • stream  : 출력 대상 파일 포인터
        • 반환 값 : 에러 발생시 EOF 발생
        •           정상적인 출력 시 음수가 아닌 값을 반환
slide32
파일 입출력 함수
  • fputs()함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03     FILE *stream;
    • 04     static char string[] = "Binary Files\nText Files";
    • 05     if( (stream = fopen( "file.txt", "w" )) != NULL ){
    • 06          fputs(string,stream);
    • 07     }
    • 08     fclose( stream );
    • 09 }
    • 출력 결과 : ______________________
    •             ______________________

Binary Files

Text Files

slide33
파일 입출력 함수
  • 형식을 갖춘 파일 입출력 ( fprintf / fscanf )
    • fprintf() 함수
      • 형식을 포함하여 파일에 텍스트 문자열 작성
      • printf() 함수와 비슷하지만 출력 위치가 파일이다.
      • 함수 원형
        • int fprintf( FILE* stream, char*format [, argument ]...);
          • stream : 출력 파일 포인터
          • format : 형식 지정 문자을 포함한 출력 문자열
          • argument : 인수 리스트
          • 반환 값 : 정상적인 수행 시 출력한 바이트 수를 리턴
          •           오류 발생 시 음수 값 리턴
slide34
파일 입출력 함수
  • fscanf() 함수
    • 형식을 포함하여 텍스트 파일로부터 값 읽기
    • scanf와 동일하게 사용되며 표준 입력 장치가 아닌 파일로부터 입력
    • 표준 입력 장치의 파일의 끝 ( CTRL + Z )
    • 함수의 원형
      • int fscanf( FILE *stream, char *format [, argument ]... );
        • stream : 입력 파일 포인터
        • format : 입력 형식 제어 문자열
        • argument : 인수 리스트
        • 반환 값 : 정상적인 수행 시 인수의 개수를 반환
        •           파일의 끝이나 에러 발생시 EOF 반환
  • 이 두 함수에서 입력 파일 포인터를 stdin(표준 입력)으로 출력 파일 포인터를 stdout(표준 출력)으로 지정 시 scanf()와 printf()함수와 동일한 효과 발생
slide35
파일 입출력 함수
  • 형식을 갖춘 파일 입출력 함수 사용 예
    • 01 #include <stdio.h>
    • 02 void main(){
    • 03 FILE *in,*out;
    • 04     int     ivalue = 128, i;
    • 05     float   fvalue = 2.35f, f;
    • 06     char    str[] = "textfile", s[80];
    • 07     // 파일 쓰기
    • 08     out = fopen( "file.txt", "w" );
    • 09     fprintf(out, "%d %f %s", ivalue, fvalue, str );
    • 10     fclose(out);
    • 11     // 파일 읽기
    • 12     in = fopen("file.txt","r");
    • 13     if(in != NULL){
    • 14             fscanf(in,"%d %f %s",&i,&f,s);
    • 15             fprintf(stdout,"int = %d , double = %f \n", i,f);
    • 16             printf("str = %s \n",s);
    • 17             fclose(in);
    • 18     }
    • 19 }
slide36
파일 입출력 함수
  • 이진 파일 입/출력 함수 (fread / fwrite)
    • 문자 변환 없이 이진 파일의 입/출력 함수
    • fread 함수
      • 이진데이터의 입력 함수
      • 함수의 원형
        • size_t fread(void *buffer,size_t size,size_t count,FILE *stream );
          • buffer : 저장할 데이터 위치
          • size : 읽을 데이터의 크기
          • count : 읽을 데이터의 개수
          • stream : 읽을 파일 포인터
          • 반환 값 : 정상적일 경우 읽은 데이터의 개수
          •           파일의 끝이나 오류 발생시 실제 읽은 데이터의 개수로
          • count 값보다 작은 값 반환
slide37
파일 입출력 함수
  • fwrite 함수
    • 이진 파일의 출력 함수
    • 함수의 원형
      • size_t fwrite(void *buffer,size_t size,size_t count,FILE *stream );
        • buffer : 저장 대상 데이터 위치
        • size : 작성할 데이터의 크기
        • count : 작성할 데이터의 개수
        • stream : 작성할 파일 포인터
        • 반환 값 : 실제 저장된 데이터의 개수
        •           오류 발생시 count 값보다 작은 값 반환
slide38
파일 입출력 함수

01 #include <stdio.h>

02 void main(){

03     FILE *in, *out;

04     static int ivalue[] = {100,200,300};

05     int iresult[3], i, cnt;

06     //쓰기용 이진 파일 열기

07     out = fopen("file.bin","wb");

08     if(out==NULL){

09             printf("file.bin 파일 열기 실패 !");

10             return;

11     }

12     // 값 저장

13     cnt = fwrite(ivalue,sizeof(int),3,out);

14     if(cnt != 3) {

15             printf("ivalue 쓰기 실패 !\n");

16             fclose(out);

17             return;

18     }

19     fclose(out);

20     //읽기용 이진 파일 열기

21     in = fopen("file.bin","rb");

22     if(in==NULL){

23             printf("file.bin 파일 열기 실패 !\n");

24             return;

25     }

  • fread와 fwrite 함수 사용 예

26     // 정수 값 읽기

27     i=0;

28     do{

29             cnt=fread(&iresult[i],sizeof(int),1,in);

30             i++;

31     }while(cnt == 1);

32     if(ferror(in)){

33             printf("파일 읽기 에러 !\n");

34             fclose(in);

35             return;

36     }

37     if(feof(in)){

38             printf(" 파일읽기 완료 !\n");

39             printf(" 결과 데이터 : ");

40             for(i=0; i<3;i++){

41                     printf("%5d",iresult[i]);

42             }

43             printf("\n");

44     }

45     fclose(in);

46 }

slide39
파일 입출력 함수
  • 임의 파일 접근 함수 (fseek, ftell, rewind)
    • 일반적인 파일 입출력
      • 순차적 접근 방식
      • 순차적으로 값을 읽고 자동적으로 파일 포인터 증가 방식
    • 임의 접근 방식
      • 읽고자 하는 위치로 파일 포인터 이동
    • 임의 파일 접근 함수의 종류
      • fseek
      • ftell
      • rewind
slide40
파일 입출력 함수
  • fseek 함수
    • 파일 포인터를 원하는 위치로 이동 시키는 함수
    • 함수의 원형
      • int fseek( FILE *stream, long offset, int origin );
        • stream : 파일 포인터
        • offset  : 지정된 시작 위치에서부터 떨어진 바이트의 수
        • origin  : 시작 위치
        • 반환 값 : 정상적인 수행 후 파일 포인터 해당 위치로 이동,
        • 결과 값 0반환
        •           실패 시 0이 아닌 다른 값 반환
    • 시작 위치(origin)의 종류
slide41
파일 입출력 함수
  • fseek 함수 사용 예
    • fseek(stream, 100L, SEEK_SET);
      • 파일의 시작 위치에서 100바이트 떨어진 위치로 파일 포인터 이동
    • fseek(stream, 30L, SEEK_CUR);
      • 파일포인터의 현재 위치에서 30바이트 증가된 위치로 파일 포인터 이동
    • fseek(stream, -20L, SEEK_END);
      • 파일의 끝 위치에서 20바이트 감소된 위치로 파일 포인터 이동
  • ftell 함수
    • 현재의 파일 포인터 위치 반환 함수
    • 함수의 원형
      • long ftell( FILE *stream);
        • stream  : 파일 포인터
        • 반환 값 : 정상적으로 수행 시 파일 포인터의 현재 위치 반환
        •           실패 시 -1값을 반환
  • rewind 함수
    • 파일 포인터의 위치를 처음으로 이동
    • 함수의 원형
      • void rewind( FILE *stream);
        • stream  : 파일 포인터
        • 반환 값 : 없음 (파일 포인터의 위치를 처음으로 이동)
slide42
파일 입출력 함수
  • fseek, ftell 그리고 rewind 함수 사용 예

01 #include <stdio.h>

02 void main(){

03     FILE *in;

04     int result1,result2, seek;

05     //읽기용 이진 파일 열기

06     in = fopen("file.bin","rb");

07     if(in==NULL){

08             printf("file.bin 파일 열기 실패 !\n");

09             return;

10     }

11     // 정수 값 읽기

12     seek = fseek(in,-(sizeof(int)),SEEK_END);

13     if(seek == 0){ // 정상적인 이동

14             printf("locattion after seek : %d \n", ftell(in));

15             fread(&result1,sizeof(int),1,in);

16             printf("feek = %d\n",result1);

17             rewind(in);

18             printf("location after rewind : %d \n", ftell(in));

19             fread(&result2,sizeof(int),1,in);

20             printf("rewind = %d\n",result2);

21     }

22     fclose(in);

23 }

slide44
텍스트 파일 활용
  • 학습개요
    • 예제를 통한 텍스트 파일 관련 함수를 이용한다.
    • 간단한 텍스트 문서 편집기를 만든다.
    • 문자 조작 함수를 사용한다.
slide45
텍스트 파일 활용
  • 텍스트 편집기
    • 문제 정의
      • 텍스트 편집기는 다양한 분야에서 활용되고 있다. 이러한 텍스트 편집기로 동작 가능한 프로그램을 만들어 보자. 만들 텍스트 편집기의 기능은 새 파일 작성, 불러오기, 저장하기 기능과 라인단위의 수정 기능을 포함하고 있다. 새 파일 작성은 키보드로부터 문자열을 입력 받아 문자열 공간에 저장하고 이 내용을 새로운 파일로 작성한다. 불러오기는 특정 파일을 읽어 화면에 출력시킨다. 또한 수정 기능은 라인 단위의 수정 기능만을 제공한다. 이러한 내용을 만족하는 텍스트 편집기를 작성 하시오.
    • 입/출력 조건
      • 입력 조건
        • 1. 작업 선택(1: 새파일, 2: 열기, 3: 수정 , 4: 종료)
        • 2. 새 파일 선택 시 문자열
        •    입력 문자열 입력 종료는 [CTRL + Z] 입력 - [EOF 의미]
        • 입력 종료 시 저장 여부 확인
        • 3. 불러오기 선택 시 파일의 이름 입력
        • 4. 수정하기 선택 시 수정할 파일 이름 입력
        •    수정을 위해 라인과 문자열 입력
        •    수정 후 저장 여부 확인
        • 6. 텍스트로 저장할 문자열의 크기는 1024 바이트로 한정한다.
slide46
텍스트 파일 활용
  • 입/출력 조건
    • 출력 조건
      • 1. 불러오기 선택 시 해당 파일의 내용을 화면에 출력
      • 2. 수정하기 선택 시 먼저 선택된 파일을 라인단위로 출력
      •    수정 여부에 대한 메시지 출력
  • 관련 함수 및 식
    • 1.텍스트 기반 파일 관련 함수 (<stdio.h>)
      • fopen(), fclose() // 파일 열기와 닫기
      • gets(), puts()   // 표준 입출력을 통한 문자열 읽기와 쓰기
      • getchar()       // 표준 입력으로부터 한 문자 입력
      • fputs(), fgets() // 파일에 문자열 읽기와 쓰기
    • 2.문자열 조작함수(<string.h>)
      • strcat()          // 문자열 결합
    • 3.기타 함수
      • tolower()       // 한 문자를 소문자로 <ctype.h>
      • fflush()         // 버퍼비우기 <stdio.h>
      • system("cls")   // 화면 클리어 <windows.h>
slide47
텍스트 파일 활용
  • 알고리즘 (또는 플로우 차트)
    • 1) 작업 선택(1:새파일 2: 열기 3: 수정 4: 종료)
      • 1.1 새파일 작업 선택 시
        • 1.1.1 <CTRL>+Z 값을 만날 때 까지 문자열을 입력 받는다.
        • 1.1.2 입력 문자열 저장
        • 1.1.2.1 저장할 이름 입력
        • 1.1.2.1 내용 저장
      • 1.2 열기 선택 시
        • 1.2.1 열기를 원하는 파일 이름 선택
        • 1.2.1 화면에 라인단위로 출력
      • 1.3 수정 선택 시
        • 1.3.1 수정 파일에 대한 내용을 화면에 출력
        • 1.3.2 수정을 위한 라인 번호와 문자열 입력
        • 1.3.2 파일에 수정 결과 반영
    • 2) 종료를 선택하기 전까지 1)을 계속해서 반복한다.
slide48
텍스트 파일 활용
  • 프로그램 구조체차트
slide49
텍스트 파일 활용
  • 프로그램 작성
    • 1 단계
      • 349페이지의 프로그램을 위의 분석된 내용을 토대로 작성한 후 editor.c 파일로 저장하자.

①. getchar()

②. getchar()

③. gets(line) != NULL

④. strcat(pb,snum)

⑤. fp = fopen(fname,"w");      

⑥. strcat(bp,str);

⑦. strcat(bp,"\n");

⑧. strcat(bp,line)

slide50
텍스트 파일 활용
  • 2 단계
    • 다음 입력 조건에 대한 결과를 작성하여 보자

선택 1 결과 :

선택 2 결과 :

선택 3 결과 :

선택 4 결과 :

slide51
텍스트 파일 활용
  • 입력 조건에 대한 결과 작성 (계속)
slide53
이진 파일 활용
  • 학습개요
    • 구조체를 이용한 이진 파일 활용방법을 익힌다.
    • 이진파일 관련 함수의 사용법을 이해한다.
    • 도서정보 검색 프로그램을 작성한다.
slide54
이진 파일 활용
  • 도서정보 검색 프로그램
    • 문제 정의
      • 한 서점에서 보유한 책에 대한 정보를 제공하는 프로그램을 만들려고 한다. 프로그램 시작 시 서점에 보유한 책의 리스트를 보여주고 해당 목록번호를 입력 시 그 책에 대한 자세한 정보를 제공할 수 있도록 작성하여 보자. 프로그램 시작 시 책에 대한 리스트 정보와 세부정보가 이진 파일로 저장되어지고 이 저장된 내용을 이용해 검색할 수 있도록 프로그램을 작성하여라.
    • 입/출력 조건
      • 입력 조건
        • 세부정보를 원하는 책의 목록 번호
      • 출력 조건
        • 목록 번호에 대한 책의 세부 내용 출력
slide55
이진 파일 활용
  • 관련 함수 및 식
    • 1. 목록리스트와 이 리스트에 대한 세부 정보가 프로그램 시작 시 만들어 진다.
    • 2. 목록리스트와 세부정보는 구조체 형태를 가지며 이진 형태로 저장된다.
    • 3. 목록 리스트의 구조체
    • 4. 세부 정보에 대한 구조체
    • 5. 세부 정보들은 목록 순서로 파일에 저장된다.
slide56
이진 파일 활용
  • 알고리즘 (또는 플로우차트)
    • 1. 데이터를 초기화 한다.
      • 1.1 목록 리스트를 만든다.
      • 1.2 만들어진 목록리스트를 파일로 저장한다.
      • 1.3 목록에 대한 세부정보들을 만든다.
      • 1.4 세부정보를 파일로 저장한다.
    • 2. 검색 대상 선택
      • 2.1 목록 리스트 파일로부터 리스트를 읽어와 화면에 출력
      • 2.2 세부정보를 원하는 도서 목록 번호 입력
    • 3. 세부 목록 출력
      • 3.1 도서 목록 번호로 읽어올 세부 정보 선택
      • 3.2 세부 정보 출력
    • 4. 계속할 것인지 아닌지 여부 확인
      • 4.1 계속 수행 할 경우 1,2,3번을 반복한다.
      • 4.2 계속 수행 하지 않을 경우 프로그램 종료
slide57
이진 파일 활용
  • 프로그램 구조체차트
slide58
이진 파일 활용
  • 프로그램 작성
    • 1 단계
      • 위에서 분석된 내용을 기반으로 페이지 359에 존재하는 프로그램의 빈 부분을 완성하고 프로그램을 작성한 후 booksearch.c 파일로 저장하자.

①. displayDetail(num)

②. list,sizeof(LIST),5,fp1

③. details,sizeof(DETAIL),5,fp2

④. fopen("list.bin","rb")

⑤. &line,sizeof(LIST),1,fp

⑥. fp,num*sizeof(DETAIL),SEEK_SET

slide59
이진 파일 활용
  • 2 단계
    • 아래의 입력데이터에 대한 출력 결과를 작성해 보자.
ad