본문 바로가기

TEAM STUDY/한 권으로 읽는 컴퓨터 구조와 프로그래밍

표준 I/O

728x90
반응형

표준 I/O

 

장치 드라이버 내의 버퍼링은 문제 중 일부만 해결해준다.

사용자 프로그램에도 비슷한 문제가 있다.

장치 드라이버가 입력을 버퍼링해도 사용자 프로그램이 사용자가 문자를 입력할 때마다

시스템 콜을 호출하면 장치 드라이버 쪽 입력 버퍼가 아무 쓸모가 없다.

 

마찬가지로 사용자 프로그램이 문자를 기록하기 위해

매번 시스템 콜을 호출하면 장치 드라이버에 출력 버퍼가 아무 역힐도 못한다.

 

이런 상황이 자주 있기 때문에 표준 입출력 라이브러리 ( stdio ) 가 만들어졌다.

표준 입출력 라이브러리에는 사용자 프로그램이 쓸 수 있는 버퍼 I/O 함수가 들어 있다.

 

stdio 라이브러리는 버퍼 입력을 지원한다.

버퍼 입력을 사용하면 시스템 콜을 한번만 사용해 장치 드라이버에서 읽은 데이터를 버퍼에 넣을 수 있다.

 

사용자 프로그램은 버퍼가 빌 때까지 버퍼에서 입력 문자를 얻는다.

 

버퍼가 소진되면 다시 시스템 콜을 통해 입력을 더 가져온다.

출력하는 경우에는 버퍼가 꽉 차거나 중요한 문자가 출력될 때까지 문자가 버퍼에 들어간다.

 

출처 : 한 권으로 읽는 컴퓨터 구조와 프로그래밍

 

입출력을 효율적으로 하기 위해 아주 많은 일을 하는거 같아 보이지만 이게 끝이 아니다.

어떻게 사용자 프로그램을 터미널 장치 드라이버와 연결할 수 있을까 ?

 

누군가를 가르킬 때는 그 대상의 모든 특성을 완전히 기술하는 것보다 이름을 사용해 가리키면 편하다.

 

운영체제도 비슷한 접근 방식을 사용한다.

 

open 시스템 콜은 파일 이름을 파일을 참조할 수 있는 핸들 이나 파일 디스크립터로 바꿔준다.

이 핸들은 close 시스템 콜로 닫으면 더 이상 핸들을 사용할 수 없다.

 

핸들은 마치 공연이나 박물관에 들어가면서 가방을 맡기고 받는 보관증과 비슷하다.

stdio 라이브러리는 open 및 close 와 대응되는 fopen 과 fclose 라는 함수를 제공한다.

 

이 두 함수는 open 과 close 시스템 콜을 사용하되,

파일을 열어서 핸들을 얻을 때 버퍼를 설정하고

파일 핸들을 닫을 때 버퍼를 해제해준다.

 

유닉스는 장치를 파일처럼 추상화 해주므로 /dev/tty 등의 특별한 파일을 열면 터미널 장치에 접근할 수 있다.


 

728x90
반응형