C프로그램은 파일을 직접 다루지 않고 스트림(stream)을 다룬다. 스트림은 실제의 입력이나 출력이 맵핑된(mapped) 데이터의 이상화된 흐름이다.
서로다른 특성을 가진 여러 종류의 입력들이, 좀더 일관된 특성을 가진 스트림으로 표현된다는 것을 의미한다.
그렇게 되면, 파일을 여는 과정은 하나의 스트림을 그파일에 연결하는 과정이 된다. 읽기와 쓰기도 스트림을 통해 이루어진다.
컴퓨터의 운영체제는 각각의 파일이 어디에서 시작하고 어디에서 끝나는지 말해주는 어떤 방법이 필요하다. 파일의 끝을 탐지하는 한가지 방법은, 끝을 표시하는 특별한 문자를 파일안에 집어 넣는것이다.
C는 운영체제가 어떻게 파일끝을 실제로 탐지 하느냐에 관계없이, 파일의 끝에 도달했을 때 getchar()함수가 특별한 값을 리턴하게 함으로써 이 다양한 방법들을 처리한다. 이 특별한 값의 이름이 EOF(end of file)이다. 일반적으로 EOF는 stdio.h 파일에 다음과 같이 정의되어 있다.
#define EOF (-1)
입력과 출력은 함수, 데이터, 장치들과 관계를 맺는다.
프로그램이 파일을 다루는 방법은 두가지가 있다. 첫번째 방법은 파일을 열고, 파일을 닫고, 파일을 읽고, 파일에 쓰는 등의 작업을 할 수 있는 특별한 함수들을 명시적으로 사용하는 것이다.
두번쨰 방법은 키보드와 화면을 처리하도록 설계된 프로그램을 사용하되, 다른 채널을 사용하도록 입력과 출력을(예를 들면 파일로 부터 또는 파일로) 리디렉션 하는 것이다.
>>연산자는 이미 존재하는 파일의 끝에 데이터를 추가한다. pipe(|)는 한 프로그램의 출력을 두번째 프로그램의 입력으로 연결시킨다.
getchar()가 스페이스, 탭, 개행을 포함한 모든 문자를 읽는 반면에, scanf()는 수를 읽을 때 스페이스, 탭, 개행문자를 건너 뛰기 때문이다.
scanf()함수는 개행문자를 입력큐에 남겨둔다. scanf()함수는 성공적으로 읽은 항목의 수를 리턴한다.
C프로그램은 입력을, 들어오는 바이트들의 스트림으로 인식한다. getchar()함수는 각 바이트를 문자코드로 해석한다. scanf() 하무도 동일한 방식으로 입력을 인식하지만, 변환 지정자의 안내를 받아 문자입력을 수치값으로 변환할 수 있다.
'Programming > C' 카테고리의 다른 글
프로그래밍 연습 5 (0) | 2019.05.09 |
---|---|
C언어 공부 12 (0) | 2019.05.08 |
C언어 공부 10 (0) | 2019.05.08 |
C언어 공부 9 (0) | 2019.05.08 |
프로그래밍연습 4 (0) | 2019.05.06 |