본문 바로가기
dev, tech/c, c++

스트림(stream)

by 구띵 2006. 4. 14.

모든 C의 입/출력은 스트림으로 이루어짐

 

용어 정리 ( 프로그램 입력 / 출력 )

 

C 프로그램이 실행되는 동안 데이터는 램에 보관된다.

이 데이터는 프로그램에 의해 선언된 변수, 구조체, 그리고 배열 등의 형태를 가지는데,

어것은 어디에서 나왔고 프로그램은 그 데이터로 무엇을 하는가?

 

바로, 프로그램 입출력의 결과이다.

 

데이터는 외부의 장소에서 램으로 옮겨지게 되고, 프로그램은 그 데이터를 액세스할 수 있다.

 -> 프로그램 입력  -  예) 키보드나 디스크 파일

 

데이터는 입력의 반대로 프로그램 외부의 장소로 보낼 수도 있다.

 -> 프로그램 출력  -  예) 화면, 프린터, 디스크

 

그리고, 입력 원천과 출력 대상을 합쳐서 장치라고 한다.

 

스트림이란 무엇인가?

 

스트림이란 연속된 문자를 말한다. 즉, 연속된 데이터 바이트를 말한다.

 

프로그램을 통해 들어오는 연속된 바이트는 입력 스트림,

프로그램에서 외부로 흘러 나가는 연속된 데이터 바이티는 출력 스트림이다.

 

스트림이 어디에서 나왔는지 또는 어디로 가는지 걱정할 필요가 없다는 것이다.

프로그래머는 각 장치(키보드, 디스크 등)에 대한 별도의 입/출력 함수를 작성할 필요가 없다.

   -> 장치 독립성(device independent)

 

C에서의 모든 스트림은 파일에 연결된다. 즉, 디스크 파일을 말하는 것이 아니라, 키보드를 하나의 파일로, 디스크를 하나의 파일로 처리한다는 것이다. 이는 실제 물리 장치와 스트림 입/출력에 사용되는 중간 단계를 말하는 것으로, 대부분의 초보 C 프로그래머는 이런 파일들에 관심을 가질 필요가 없다. C라이브러리 함수들과 운영체제가 자동으로 처리하기 때문이다.

 

스트림 모드

 

-텍스트 스트림

 . 화면에 보이는 텍스트와 같은 문자들만으로 구성

 . 행의 형태 ( 행은 255문자를 포함 가능, 행 끝(end of line)문자 또는 개행 문자로 끝난다.

 

-이진 스트림

 . 아무 제한 없이 모든 종류의 데이터를 다룸(텍스트 데이터도 가능)

 . 정확히 있는 그대로 읽혀지고 기록된다. ( 독특한 방식으로 변환되거나 해석되지 않음)

 

ANSI C의 내장 스트림 

 

stdin : 표준 입력 / 키보드

stdout : 표준 출력 / 화면

stderr : 표준 오류 / 화면

stdprn* : 표준 프린터 / 프린터(LPT1:)

stdaux* : 표준 보조 / 직렬 포트(COM1:)

 

다섯 개의 스트림은 모두 텍스트 모드 스트림으로, C프로그램이 열리고 종료될 떄 닫히게 되는데, 자동으로 이루어진다.

 

디스크에 저장된 정보를 조작하는 등의 다른 스트림들은 프로그램에서 명시적으로 열어야 한다.

 

C의 스트림 함수

 

C 표준 라이브러리에는 스트림의 입력과 출력을 처리하는 다양한 함수들이 있다.

이들 함수의 대부분은 두가지 형태로 사용된다. 하나는 항상 표준 스트림 중의 하나를 사용하는 것이고, 다른 하나는 프로그래머가 해당 스트림을 명시할 필요가 있는 것이다.

 

printf()나 puts() 함수를 사용할 경우, 바로 stdout 스트림을 사용하는 것이다. 

 

표준 스트림을 사용하는 것 : printf(), vprintf(), puts(), putchar(), scanf(), gets(), getchar(), perror() (stdlib.h)

 

스트림 이름이 필요한 것 : fprintf(), vprintf(), fputs(), putc(), fputc(), fscanf(), fgets(), getc(), fgetc()         ------> stdlib.h 를 포함해야 한다.

 

 

댓글