스트림(stream) : 입력과 출력을 바이트(byte)들의 흐름으로 생각하는 것

스트림에는 기본적으로 버퍼가 포함되어 있다.

 이름

스트림

연결 장치

stdin

표준 입력 스트림

키보드

stdout

표준 출력 스트림

모니터의 화면

stderr

표준 오류 스트림

모니터의 화면

 


사용하는 스트림에 따른 분류

 

  • 표준 입출력 스트림을 사용하여 입출력을 하는 함수
  • 스트림을 구체적으로 명시해 주어야 하는 입출력 함수

데이터의 형식에 따른 분류

 

  • getchar()나 putchar()처럼 문자형태의 데이터를 받아들이는 입출력
  • printf()나 scanf()처럼 구체적인 형식을 지정할 수 있는 입출력

 

 

 스트림 형식

표준 스트림 

일반 스트림 

설명 

 형식이 없는 입출력(문자 형태)

 getchar()

 fgetc(FILE *f,...)

 문자 입력 함수

 putchar()

 fputc(FILE *f,...)

 문자 출력 함수

 gets()

 fgetcs(FILE *f,...)

 문자열 입력 함수

 puts()

 fputs(FILE *f,...)

 문자열 출력 함수

 형식이 있는 입출력(정수, 실수,..)

 printf()

 fprintf(FILE *f,...)

 형식화된 출력 함수

 scanf()

 fscanf(FILE *f,...)

 형식화된 입력 함수


스트림은 구체적으로 FILE 구조체를 통하여 구현

FILE은 stdio.h에 정의되어 있다.


파일의 개념


C에서의 파일은 일련의 연속된 바이트

모든 파일 데이터들은 결국은 바이트로 바뀌어서 파일에 저장


텍스트 파일 : 사람이 읽을 수 있는 텍스트가 들어 있는 파일

아스키 코드를 이용하여 저장, 연속적인 라인들로 구성


이진 파일 : 사람이 읽을 수는 없으나 컴퓨터는 읽을 수 있는 파일. 이진 데이터가 직접 저장되어 있는 파일. 

텍스트 파일과는 달리 라인들로 분리되지 않음. 모든 데이터들은 문자열로 변환되지 않고 입출력


파일 처리 순서

파일 열기 -> 파일 읽기 및 쓰기 -> 파일 닫기

디스크 파일은 FILE 구조체를 이용하여 접근

파일 포인터 : FILE 구조체를 가리키는 포인터


파일 열기

FILE *fopen(const char *name, const char *mode)

name : 파일의 이름(경로 포함) 

mode : 파일을 여는 모드 ("r" : 읽기, "w" : 쓰기, "a" : 이어 쓰기, 

         "b" : 이진 파일 모드로 열기 -> rb : 읽기 모드+이진, wb : 쓰기 모드 + 이진 파일 모드)


<!--[endif]-->

파일 닫기

int fclose(FILE *stream);

파일 지우기

int remove(const char *path);


파일 입출력 라이브러리 함수

 

종류

설명

입력 함수

출력 함수

문자 단위

문자 단위로 입출력

int fgetc(FILE *fp)

int fputc(int c, FILE *fp)

문자열 단위

문자열 단위로 입출력

char *fgets(FILE *fp)

int fputs(const char *s, FILE *fp)

서식화된 입출력

형식 지정 입출력

int fscanf(FILE *fp, ...)

int fprintf(FILE *fp,...)

이진 데이터

이진 데이터 입출력

fread()

fwrite()


버퍼링

fopen()을 사용하여 파일을 열면, 버퍼가 자동으로 만들어진다.

버퍼는 파일로부터 읽고 쓰는 데이터의 임시 저장 장소로 이용되는 메모리의 블록

디스크 드라이브는 블록 단위 장치이기 때문에 블록 단위로 입출력을 해야만 가장 효율적으로 동작

1024바이트의 블록이 일반적

파일과 연결된 버퍼는 파일과 물리적인 디스크 사이의 인터페이스로 사용


fflush(fp) : 버퍼의 내용이 디스크 파일에 써진다.

setbuf(fp,NULL) : 스트림의 버퍼를 직접 지정하는 함수로서 만약 버퍼자리에 NULL을 써주면 버퍼를 제거하겠다는 것을 의미


순차 접근 방법 : 데이터를 파일의 처음부터 순차적으로 읽거나 기록하는 방법

임의 접근 방법 : 파일의 어느 위치에서든지 읽기와 쓰기가 가능한 방법


임의 접근 파일의 원리

파일 위치 표시자 : 읽기와 쓰기 동작이 현재 어떤 위치에서 이루어지는 지를 나타낸다.

강제적으로 파일 위치 표시자를 이동시키면 임의 접근이 가능

int fseek(FILE *fp, long offset, int origin);

fp : 열린 파일을 저장한 변수

offset : 임의 접근할 곳 (단위 L 100L이면 100바이트 이동한다)

origin : SEEK_SET = 파일의 시작 SEEK_CUR = 현재 위치 SEEK_END = 파일의 끝


void rewind(FILE *fp) : 파일 위치 표시자를 0으로 초기화


long ftell(FILE*fp) : 파일 위치 표시자의 현재 위치를 반환


+ Recent posts