스트림 (Stream)
쉽게 말해서 스트림이란 데이터의 이동경로를 의미한다.
데이터는 어디서 와 어디로 가는가?
가장 일반적으로 떠올릴 수 있는 대답은 키보드로 입력받은 데이터가 프로그램으로 흘러들어 가거나
반대로 프로그램에서 데이터를 모니터로 출력하는 경우일 것이다.
그러나 마우스, 프린터, 화상 카메라, 스캐너, 파일 등도 데이터 입력 대상이 될 수 있고
스피커, 파일 등도 출력의 대상이 될 수 있다.
이렇게 데이터 입출력 대상의 범위는 매우 넓고 포괄적인 의미가 있다.
그런데 모니터로 문자열을 어떻게 출력할 수 있는 걸까?
정확히 말해서 printf 함수 호출 시 어떤 과정을 거쳐서 문자열이 출력되는 것일까?
운영체제에서는 데이터를 외부로 출력하거나 외부에서 입력받을 수 있는 소프트웨어적인 가상의 다리를 제공하고 있다.
이것이 바로 스트림인 것이다.
따라서 출력함수를 호출하게 되면 운영체제에서 제공하고 있는 스트림을 요청하게 되는 것이다.
콘솔 입출력 스트림
그런데 printf 함수와 scanf 함수를 호출하면서 스트림의 생성과 관련된 코드를 본 적은 없을 것이다.
사실 콘솔 입출력을 위한 스트림은 프로그램이 실행되면 자동으로 생성되며
프로그램이 종료되면 자동으로 소멸한다.
이 입출력 스트림은 표준 스트림(Standard Stream)이라고 한다.
표준 스트림에는 아래 3가지 종류의 스트림이 존재한다.
stdin (표준 입력 스트림 / 키보드 대상으로 입력)
stdout (표준 출력 스트림 / 모니터 대상으로 출력)
stderr (표준 에러 스트림 / 모니터 대상으로 출력)
EOF
EOF란 End Of File의 약자로 파일의 끝을 표현하기 위해 정의해 놓은 상수로 -1로 정의되어 있다.
파일이 아닌 문자의 입출력에서는 아래 두 가지 경우에 EOF가 반환된다.
함수호출 실패
Windows에서 CTRL+Z, Linux에서 CTRL+D 가 입력될 경우
그런데 일부 C 컴파일러 중에는 char를 unsigned char로 처리하는 컴파일러가 존재한다.
따라서 어떠한 상황에서도 -1을 인식하기 위해서 입출력함수의 반환형과 매개변수는 int형으로 정의되어 있다.
'C언어 > C언어 문법' 카테고리의 다른 글
[C언어] 버퍼(Buffer), 입출력버퍼 비우기(fflush) (0) | 2024.02.22 |
---|---|
[C언어] 파일 입출력 함수 (fputc, fputs, fgetc, fgets, putchar, getchar, puts, gets) (0) | 2024.02.21 |
[C언어] static 변수, register 변수 (0) | 2024.02.19 |
[C언어] 상수형 포인터 (Const Pointer) (0) | 2024.02.18 |
[C언어] scanf 호출 시 &연산자를 사용하는 이유 (0) | 2024.02.18 |