Backend/OS

[OS] POSIX 기초

lakelight 2022. 9. 11. 14:06
728x90
반응형

POSIX (Portable Operation System Interface)

이식 가능한 운영 체제 인터페이스의 약자로, 서로 다른 UNIX OS의 공통 API를 정리하여 이식성이 높은 UNIX 응용 프로그램을 개발하기 위한 목적으로 IEEE가 책정한 애플리케이션 인터페이스 규격입니다.

즉, 한 운영체제에서 개발한 프로그램을 다른 운영체제에서도 쉽게 돌아가도록 하는 표준을 말합니다. (소스코드의 호환)

 

표준 스트림

특정한 프로그래밍 언어 인터페이스 뿐 아니라 유닉스 및 유닉스 계열 운영체제에서 컴퓨터 프로그램과 그 환경 사이에 미리 연결된 입출력 통로를 말합니다.

표준 스트림으로 인해 프로그래머나 프로그램에서 입출력을 사용해야 할 때, 입출력 장치 연결하기 위한 추가 작업 필요 없이 입출력사용할 수 있습니다. (호환성 제공)

 

표준 스트림 종류

표준 스트림에는 표준입력(stdin), 표준출력(stdout), 표준오류(stderr)이 있습니다. 그리고 이들은 POSIX에 포함되어 있습니다.

  • 표준입력 (stdin)
    프로그램으로 들어가는 데이터(문자열) 스트림입니다.
    [ex] POSIX <unistd.h> STDIN_FILENO
  • 표준출력 (stdout)
    프로그램이 출력 데이터를 기록하는 스트림입니다.
    [ex] POSIX <unistd.h> STDOUT_FILENO

  • 표준오류 (stderr)
    프로그램이 오류 메시지나 진단을 출력하기 위해 일반적으로 쓰이는 또다른 출력 스트림입니다.
    [ex] POSIX <unistd.h> STDERR_FILENO

 

표준 스트림 사용

터미널에서 `echo foo` 라는 명령어를 사용했다고 했을 때 아래와 같은 동작이 일어납니다. (echo: 문자열을 터미널에 출력)

이미지 출처: https://velog.io/@goban/POSIX-%EA%B8%B0%EC%B4%88

  1. stdin을 통해 키보드 입력을 받습니다. (표준 입력)
  2. 입력 받은 데이터를 echo에게 전달합니다.
  3. echo는 stderr에 데이터를 저장합니다. (표준 오류)
  4. echo는 stdout에게 데이터를 전달합니다. (표준 출력)

 

파이프

프로그램의 출력 결과를 다른 프로그램의 입력 값으로 쓰는 구조를 말합니다.

터미널에 `echo "foo bar baz" | wc -w`를 입력했을 때 아래와 같은 동작이 일어납니다.

이미지 출처: https://velog.io/@goban/POSIX-%EA%B8%B0%EC%B4%88

  1. stdin을 통해 키보드 입력을 받습니다. (표준 입력)
  2. 입력받은 데이터를 echo에게 전달합니다.
  3. echo는 데이터를 stderr에 저장합니다. (표준 오류)
  4. echo는 데이터를 stdout을 통해 다음 처리할 곳으로 전달합니다. (표준 출력)
  5. wc는 stdin을 통해 echo가 처리한 데이터를 받습니다. (표준 입력)
  6. wc는 받은 데이터를 stderr에 저장합니다. (표준 오류)
  7. wc는 처리한 결과를 stdout을 통해 출력합니다. (표준 출력)

 

 

마무리

한 프로그램에서 개발한 프로그램이 다른 운영체제에서도 돌아갈 수 있도록 하는
POSIX 표준을 알아보았습니다. 실제로 개발을 할 때 다양한 환경이 있기 때문에
이러한 표준을 공부했을 때 다양한 상황에 대처할 수 있을 것 같습니다.

이번 포스팅에서는 입출력에 대해서 자세하게 보았습니다.
도움이 되셨길 바라고 포스팅 봐주셔서 감사합니다.

 

[참고]

1. POSIX 기초

728x90
반응형