Section 3. 표준 입력 / 표준 출력 / 표준 에러 출력
grep
은 텍스트 파일로 지정한 패턴의 문자열을 포함한 행을 출력하는 프로그램이다. 텍스트 파일의 '입력'과 패턴을 포함한 결과 행의 '출력'으로 나눌 수 있다. UNIX의 중요 개념 중에는 표준 입력, 표준 출력, 표준 에러 출력이 있다. 프로세스가 생성되면 세 개의 파일 디스크럽터(file descriptor)가 준비된다. 파일 디스크립터는 데이터의 출입구를 의미한다.
3.1 세 가지 표준 입출력
표준 입력(stdin) - 파일 디스크립터 0
프로세스에 데이터를 입력하는 스트림. 파일이나 그 외 프로세스의 출력 결과를 입력으로 받아들일 수도 있다. 특별한 입력 지정이 없는 경우에는 키보드가 그 역할을 담당한다. 0<
표준 출력(stdout) - 파일 디스크립터 1
프로세스의 실행 결과나 실행 상태 보고를 출력하는 스트림. 기본값으로는 단말기 디스플레이가 그 역할을 담당하게 되어 있다. 실행 결과와 실행 상태 보고를 동시에 수행하는 프로세스라면 실행 결과만을 출력한다. 1>
표준 에러 출력(stderr) - 파일 디스크립터 2
프로세스의 실행 상태나 에러 메시지를 출력하는 스트림. 기본값으로는 단말기 디스플레이가 그 역할을 담당한다. 2>
3.2 표준 입출력 표시 예
Chapter 2의 Section 1에서 리다이렉션과 파이프를 배울 때 살짝 언급이 되었었다.
파일 디스크립터(0, 1, 2)의 생성
프로세스는 파일 디스크립터(0, 1, 2)를 사용해 스트림을 변경할 수 있다.
편집 중인 test.txt의 임시 파일은 파일 디스크립터 3에 할당되어 있다. 이것은 .test.txt.swp에 연결되어있으므로 프로세스는 3를 open()한 다음 여기에 기록함으로써 데이터를 임시 저장하게 된다. vi는 저장하지 않으면 test.txt가 되지 않으므로 임시 파일인 .test.txt.swp가 열려 있다. 그 외 파일 디스크립터 0, 1, 2는 모두 /dev/tty1에 링크되어 있다. 이것은 vim을 실행하는 단말기가 tty1을 이용하고 있기 때문이다. 참고로 지금 이용하는 단말기 장치는 tty
로 확인할 수 있다(TeleTYpewriter). 그리고 0, 1, 2가 단말기 장치로 지정된 것은 입출력(0, 1), 에러 출력(2) 모두 디스플레이에 표시한다는 의미이다.