본문 바로가기

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

런타임 라이브러리와 표준 입출력

728x90
반응형

런타임 라이브러리와 표준 입출력

 

C프로그램을 실행 하려면

우리가 작성한 코드를 컴파일한 다음,

컴파일된 코드와 이 코드가 사용하는 stdio 라이브러리 등의 다른 코드를 링크 해야 한다.

 

C에서 런타임 라이브러리는 crt0 등의 이름으로 불린다.

 

런타임 라이브러리는 스택과 힙을 설정해서 사용 할 수 있도록 준비하는 등의 설정을 담당한다.

런타임 라이브러리는 추가로 터미널 장치 드라이버와 연관된 파일을 하나는 입력을 위해, 하나는 출력을 위해 연다.

 

stdio 라이브러리는 ( 런타임 라이브러리가 연 ) 시스템 파일 디스크립터를 파일 포인터와 연관 시킨다.

 

파일 포인터는 버퍼링이나 파일 관리에 필요한 데이터 구조를 가르킨다.

 

stdio 는 기본적으로 세 가지 파일 포인터를 제공한다.

  • stdio - 표준 입력
  • stdout - 표준 출력
  • stderr - 표준 오류 출력 파일 포인터

 

중요한 정보를 출력해야 하면 stdout 대신 stderr 에 내용을 출력해야 한다.

stdout 와 stderr 는 똑같은 대상으로 데이터를 보내지만,

stderr는 버퍼를 사용하지 않고

stdout 은 버퍼를 사용한다.

 

오류 메세지를 stdout 으로 보내면 메세지가 버퍼에 들어가기 때문에

프로그램이 중단될 때 표시되지 않을 수도 있다.

 

특별히 변경하지 않았다면 stdout 과 stderr 는 아래 그림처럼 똑같은 파일 디스크립터를 공유한다.

 

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

 

이상한 계기로 발명이 촉발되는 경우가 있다.

스티브 존슨에 따르면 stderr 는 원래 stdio 라이브러리에 들어 있지 않았다.

 

C/A/T 사진조판장치를 위한 최조의 컴퓨터 조판 소프트웨어 개발 과정에서 부산물로 stderr 가 추가됐다.

지금은 레이저나 잉크젯 프린터가 당연한 것으로 여겨지지만,

C/A/T 라는 괴물은 사진을 은 인화지에 전사하고 나중에 현상을 해야만 했다.

 

그래서 헌트 형제가 은 시장을 조작했을 떄는 사진 조판 사용을 줄여달라는 요청을 받은 적도 있다.

 

사진조판장치로 작업을 보냈는데 아름답게 조판된 cannot open file 이라는

오류 메세지가 찍힌 페이지를 얻는 경우도 드물지 않았다.

 

그래서 오류 메세지를 사진 조판 장치로 보내지 않고 터미널로 보내서 돈을 아끼기 위해 stderr 가 만들어졌다.

 


 

728x90
반응형