Language/C C 언어 강좌 (파일 입출력/getc, putc/스트림/버퍼/FILE/fopen, fclose) [20120622]
  • 728x90
    반응형

     

     

     

    C언어 Chapter 29.파일 입출력


     

     

     

     

    파일 입출력

    📌 C 언어는 자체에서 입출력의 기능을 제공하지 않고, 라이브러리 함수를 이용하여 데이터의 입출력을 처리한다.

     

    🔔 예) 입출력을 지원하는 C++언어의 예

     

    실행 결과

     

    C 언어에서의 파일의 개념과 형식 프로그램에서 사용되는 여러 가지 파일 입출력 함수를 소개한다.

     

     

    입출력 스트림과 저장 형식

    • C언어에서는 여러가지 입출력 장치를 논리적인 파일로 본다.

     

    📌 스트림

    • 파일과 프로그램 사이에 교환되는 연속적인 1byte의 흐름을 말한다.
    • size 가 정해지지 않은 바이트의 흐름.
    • 구조체는 size가 정해져 있음으로 블록단위로 정의한다.
    • 텍스트 스트림 : 파일을 텍스트모드(text mode) 로 열 때 사용된다.
    • 이진 스트림 : 파일을 이진 모드(binary mode) 로 열 때 사용된다.

     

    💡 위 두 스트림의 유래는 유닉스와 도스의 차이점에서 비롯 된다. 이 두 시스템에서는 개행문자의 처리와 EOF를 인지하는 방법이 다르다.

    • 텍스트 스트림에서는 개행문자('\n')를 캐리지 리턴 ('\r')과 라인피드 문자('\n')의 2문자로 변환시킨다.
    • 이진 스트림에서는 저장데이터와 입출력 스트림 사이에 데이터 변환이 없다.

    [정수 25,678은]

    • 아스키 코드를 이용하여 다섯 개의 문자로 5바이트 메모리에 저장된다.
    • 이진형식은 주메모에 저장되는 형식과 같이 4바이트의 정수 값으로 메모리에 저장된다.

     

     

    표준 입출력

    <입출력 함수>

     

    💡 콘솔 ? 화면
    💡 형식화 ? 여러가지 형태로 %s, %d, %x 등으로 취급

     

     

     

    버퍼

    • 표준 입출력에서는 버퍼가 이용된다.
    • 버퍼는 임시 기억장소를 의미한다.
    • 운영체제에 의해서 관리된다.
    • 버퍼의 크기는 512byte 나 512byte 의 배수이다.
    • 버퍼 내의 데이터는 다음의 경우에 실제 디스크에 기록된다.
      1. 버퍼가 다 채워 졌을 때
      2. 파일이 닫힐 때
      3. 프로그램이 종료될 때, 실제로 디스크에 기록된다.

     

    <입출력 버퍼>

     

     

    파일의 열기와 닫기

    • 구조체를 통하여 프래그램은 파일과 통신한다.
    • 구조체의 원형은 <stdio.h> 파일에 FILE 형으로 정의되어 있다.
    • 파일의 구조체를 가리키는 포인터 변수를 다음과 같이 선언한다.

    FILE *fpointer;

     

    • 파일을 열기위해서는 fopen() 함수를 다음과 같이 호출한다.

    fpointer = fopen("d11-0.dat", "w");

     

    • 위 명령문이 실행되면, 운영체제는 "d11-0.dat" 라는 파일을 열고 파일에 대한 구조체를 생성하여, 구조체를 가리키는 포인터를 호출 프로그램에게 돌려준다.
    • "d11-0.dat" 파일은 파일포인터 변수 fpointer를 이용하여 접근한다.
    • 두번째 인자 "w"는 이 파일에 데이터를 기록 하겠다는 의미이다.
    • 위 과정 이것을 모드라 부른다.

     

    <파일 열기 모드>

     

    • 파일의 사용이 끝났을 경우 파일과의 통신을 종료하기 위해서 다음과 같이 fclose() 함수를 호출한다.

    fclose(fpointer);

     

    • fopen()과 fclose() 함수의 원형

    FILE *fopen(const char *filename, const char *model);

    int fclose(FILE *fp);

     

    • fopen() 함수는 실패할 경우 NULL 값을 돌려주고, fclose() 함수는 성공할 경우 0을 실패할경우 EOF 를 돌려준다.

     

     

    문자의 입출력

    int getc(FILE *fp);               // 파일의 끝에 도달하면 EOF를 반환

    int putc(int ch, FILE *fp);    // 실패할 경우 EOF 반환

     

    • <conio.h> 에 정의되어 있다.

     

    🔔 예) 문자를 읽어 데이터 파일을 작성하고, 파일의 내용을 화면에 출력하는 프로그램

     

    실행 결과

     

     

     

     

    728x90
    반응형
상단으로