CS/OS

표준 스트림 stdin, stdout, stderr

dragonhyeon 2024. 9. 30. 13:15
728x90
반응형

데이터 스트림 (Data Stream)

데이터 스트림은 데이터가 연속적으로 흐르는 통로를 의미합니다. 프로그램이나 프로세스가 데이터를 읽거나 쓸 때, 데이터 스트림을 통해 데이터를 주고받습니다.

표준 스트림 (Standard Streams)

표준 스트림은 데이터 스트림 중에서 프로세스가 입출력 및 오류 처리를 위해 사용하는 기본 스트림입니다. 표준 스트림은 다음과 같이 세 가지로 구분됩니다.

  • 표준 입력 (Standard Input, stdin) :
    • 입력 데이터를 처리하는 스트림
    • 보통 파일 디스크립터 0번을 참조
    • 리다이렉션 (<) 을 통해 표준 입력의 연결 대상 변경 가능
  • 표준 출력 (Standard Output, stdout) :
    • 정상적인 출력을 처리하는 스트림
    • 보통 파일 디스크립터 1번을 참조
    • 리다이렉션 (>) 을 통해 표준 출력의 연결 대상 변경 가능
  • 표준 오류 (Standard Error, stderr) :
    • 오류 메시지를 처리하는 스트림
    • 보통 파일 디스크립터 2번을 참조
    • 리다이렉션 (2>) 을 통해 표준 오류의 연결 대상 변경 가능

파일 디스크립터 (File Descriptor)

파일 디스크립터는 파일, 터미널, 소켓 등 자원을 가리키는 추상적인 참조 (핸들) 입니다. 표준 입력, 표준 출력, 표준 오류는 각각의 파일 디스크립터를 참조하여 자원에 접근하며 프로세스는 이를 통해 입출력 작업을 수행합니다.

  • 파일 디스크립터 0번:
    • 보통 표준 입력 (stdin) 에 할당
    • 디폴트로 키보드 입력을 가리킴
  • 파일 디스크립터 1번:
    • 보통 표준 출력 (stdout) 에 할당
    • 디폴트로 터미널을 가리킴
  • 파일 디스크립터 2번:
    • 보통 표준 에러 (stderr) 에 할당
    • 디폴트로 터미널을 가리킴
프로세스 생성 시 커널은 기본적으로 파일 디스크립터 0, 1, 2 번을 각각 표준 입력, 표준 출력, 표준 오류에 연결시킨 후 각 표준 스트림을 해당 프로세스에 할당합니다.

표준 스트림 동작 원리

예를 들어 echo hi > output.txt 명령어에서 표준 스트림이 어떻게 동작하는지 살펴보면 다음과 같습니다.

  1. 리다이렉션 설정 (파일 디스크립터가 참조하는 객체 (목적지) 변경) :
    1. 셸은 > 보고, 표준 출력이 참조하는 파일 디스크립터의 목적지를 output.txt 파일로 변경해야 한다고 인식합니다.
    2. 셸은 시스템 호출을 통해 해당 파일 디스크립터의 목적지를 output.txt 로 변경해 달라고 커널에 요청합니다.
    3. 커널은 해당 파일 디스크립터가 터미널이 아닌 output.txt 파일을 가리키도록 설정합니다.
  2. echo hi 명령 실행 (데이터 출력) :
    1. 셸은 echo hi 명령을 해석하여 시스템 호출을 통해  "hi" 라는 데이터를 표준 출력으로 보내달라고 커널에 요청합니다.
    2. 표준 출력은 이미 output.txt 로 리다이렉션 된 상태이므로, 커널은 표준 출력에 보내는 데이터를 output.txt 에 보내 기록을 완료합니다.
728x90
반응형

'CS > OS' 카테고리의 다른 글

프로세스 (Process) vs 쓰레드 (Thread)  (2) 2024.10.10
메모리 (Memory)  (5) 2024.10.05
커널 (Kernel)  (3) 2024.09.24
프로그램 vs 프로세스  (1) 2024.09.23
CLI 환경의 이해  (6) 2024.09.16