[KOCW 한국산업기술대학교 박정민 교수님] C 프로그래밍 17강

MinWoo Park·2021년 8월 28일
0

KOCW

목록 보기
17/19
post-thumbnail

Part17 콘솔 입출력과 파일 입출력

17.1 스트림이란

스트림(Stream)

  • Stream: 개울, 시내, 줄기
  • 데이터를 입력하고 출력하기 위한 다리
  • 키보드로 데이터를 입력 -> 표준 입력 스트림
  • 모니터로 데이터를 출력 -> 표준 출력 스트림
  • 표준 입출력 스트림은 프로그램 시작 시 생성되며 프로그램 종료 시 소멸됨
  • 표준 입력 스트림: stdin(Standard Input)
  • 표준 출력 스트림: stdout(Standard Output)
  • 표준 에러 스트림: stderr(Standard Error), 출력 대상이 모니터이기에 stdout과 같음

버퍼(Buffer)

  • Buffer: 완충제
  • 처리할 데이터를 임시로 저장하는 장소
  • 입력 버퍼: 입력 데이터를 저장하기 위한 버퍼
  • 출력 버퍼: 출력 데이터를 저장하기 위한 버퍼
  • 데이터 전송을 벽돌을 옮기는 일에 비유한다면,
    스트림(다리)이 있기 떄문에 버퍼(리어카)에 버퍼링(리어카에 벽돌을 쌓기)을 할 수 있음

버퍼링(Buffering)

  • 버퍼를 채우는 동작
  • 문자를 개별 처리하는 것보다 문자들을 모아서 일괄 처리하는 것이 효율적이기에 성능 향상에 도움이 됨

17.2 콘솔 입출력

콘솔 표준 입출력 함수

  • 헤더 파일: stdio.h

  • getchar: Get Character, 키보드로부터 한 문자를 입력 받음, 서식 문자 %c 사용
    호출이 실패했을 때 EOF(-1) 반환

  • putchar: Put Character, 모니터에 한 문자를 출력, 서식 문자 %c 사용
    호출이 실패했을 때 EOF(-1) 반환

  • EOF(End Of File): 파일의 끝을 의미, stdio.h에 -1로 매크로 상수 정의, 입력 함수 사용 시 [ctr+z] 입력하면 EOF로 인식
    ex) getchar() 함수 실행 시 [ctz+z]를 입력하면 ch가 -1이 되어 반복문이 종료됨

#include <stdio.h>
int main(void)
{
    char ch = 0;
    while(ch != EOF) // EOF == -1
    {
        ch = getchar();
        putchar(ch);
    }

    return 0;
}

콘솔 비표준 입출력 함수

  • 헤더 파일: conio.h(Console Input/Output)
  • 비표준 함수는 버퍼를 사용하지 않아 속도가 빠르나, 데이터를 일괄 처리하는 경우에 비효율적

17.3 파일 입출력

파일 입출력의 필요성

  • 실행 중 데이터가 생성되면 데이터는 메모리에 보관 됨. 프로그램이 종료되면 메모리에 저장된 데이터는 사라짐
  • 데이터를 프로그램이 종료된 후에도 계속 사용하기 위해선 파일에 저장해야 함
  • 문자열과 같은 텍스트 기반의 데이터 파일인 텍스트 파일(Text File)
    ex) *.txt, *c, *.hwp, *.doc
  • 이진 형식으로 인코딩된 데이터 파일, 바이너리 데이터를 저장하는 바이너리 파일(Binary File), 이진 파일이라고도 하는 것이 있음
    ex) *.obj, *exe, *lib, *dll

파일을 이용한 입출력 과정

Step1~Step2.

  • 파일 스트림을 생성해야 프로그램과 파일을 연결하는 다리가 생김
  • 파일 스트림을 생성하려면 파일 포인터가 필요함
  • 파일 포인터는 파일에 접근하는데 사용되는 FILE 구조체 포인터를 의미
  • 파일 스트림(FILE 구조체 포인터)을 생성하고 파일을 여는 함수가 fopen() 함수, Step1~Step2를 한 방 해주는 함수

Step3.

  • 파일을 연 후 여러 파일 입출력 함수를 이용해서 입출력 작업 수행 가능

Step4.

  • 파일 입출력이 끝난 후에는 파일을 닫아야 하는데 이 때 사용되는 함수가 fclose() 함수

fopen() 함수와 fclose() 함수

  • 헤더 파일: stdio.h
  • fopen() 함수: 파일 스트림을 생성하고 파일을 오픈
    첫 번째 인자: filename, 두 번째 인자: mode
  • fclose() 함수: 파일 스트림을 닫고 파일도 닫음

표준 파일 입출력 함수

대표적인 표준 파일 입출력 함수

  • 파일 입출력 과정에는 fopen() 함수를 통해 파일 스트림을 생성하고 파일을 열고 나면 어떤 작업(파일 입출력)을 수행하고 파일을 닫는데, 이 때 어떤 작업을 할 수 있게 해주는 함수들이 표준 파일 입출력 함수이다
  • 표준 입출력 함수는 파일 입출력이 불가하지만, 표준 파일 입출력 함수는 위의 표와 같이 FILE* stream 자리에 stdin or stdout을 적적하게 넣으면 표준 입출력도 적용할 수 있다

나머지 함수들은 이해하기 위해 정리할 부분이 적어 코드로 직접 테스트만 진행하고 기록하진 않겠습니다.


Reference
강의: 박정민, 『C 프로그래밍』, KOCW 한국산업기술대학교, 17강
교재: 박정민, 『열혈강의 C 언어 본색 명강의가 일으키는 C 언어 기적』, 프리렉 (2011), p575-617.

profile
물음표를 느낌표로 바꾸는 순간을 사랑하는 개발자입니다.

0개의 댓글