취미와 밥줄사이

[ Linux ] File Descriptor(파일 디스크립터) 본문

OS/Linux

[ Linux ] File Descriptor(파일 디스크립터)

취미와 밥줄사이 2022. 3. 4. 16:24

파일 디스크립터

  • 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값
  • 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스
  • 유닉스 시스템에서 모든 것은 파일이다.
    • Regularfile, Directory, Socket, PIPE, Block Device, Character Device 등등 모든 객체들을 파일로써 관리된다.
    • 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 File Descriptor라는 개념을 이용한다.
  • 파일 디스크립터는 '0이 아닌 정수', 'Non-negative Integer'값이다.
    • 음수가 아닌 0과 양수인 정수 값을 가진다.
  • 프로세스가 실행중인 파일을 Open하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중에 사용하지 않는 가장 작은 값을 할당해준다.
  • 유닉스에서는 기본적으로 입력을 터미널 키보드와 연결시키고 출력을 터미널 디스플레이와 연결시킨다.
    • 유닉스는 키보드와 모니터를 포함하여 컴퓨터의 모든 것을 파일로 모델링 하는 것으로 유명하다.
    • 디스플레이어에 데이터를 쓰는 것은 스크린 위에 데이터 디스플레이를 담당하는 어떤 파일에 데이터를 쓰는 것
    • 키보드에서 데이터를 읽어오는 것은 키보드를 나타내는 어떤 파일에서 데이터를 읽어오는 것이다.
  • 데이터는 바이트를 한 곳에서 다른 곳으로 전송하는 스트림(Stream)을 통해 흐른다.
  • 3가지의 Default input/output streams가 있다.
    • 표준 입력(Standard Input(STDIN), 표준 출력(Standard Output(STDOUT)), 그리고 표준 오류(Standard Error(STDERR))이다. 기본적으로 이 스트림들은 각자 특정한 파일 디스크립터(File Descriptor)를 가지고 있다.
    • 각 파일 디스크립터는 어떤 정수(Inter)값인데 그것은 어떤 하나의 open file과 연결되어 있다.
    • 그리고 프로세스들은 파일 디스크립터를 이용해 데이터를 처리한다.
    • stdin=0, stdout=1, stderr=2
    • 이 파일 디스크립터들은 어떤 하나의 파일 디스크립터 테이블에 저장되어 있다.
  • 일반적으로 데이터가 어떤 곳으로 흘러들어가는 것을 입력이라고 하며, 데이터가 어떤 곳으로부터 흘러나가는 것을 출력이라고 한다.
    • 터미널로 데이터를 출력할 수 있는 스트림은 기본적을 2가지다.
      • stdout과 stderr이다.
  • 리눅스에서 입력이란
    • stdin을 이용해 전달된 데이터, 그리고 그 입력이 키보드, I/O redirection, file arguments)는지 상관없이
  • 리눅스 / 유닉스는 모든 장치들을 파일로 관리하는데. 일반 파일과 내부/외부 모든 장치도 파일로 취급한다. 이 파일을 관리하는 것이 파일 디스크립터다.

FIle Descriptor Table

  • 각각의 프로세스는 파일 디스크립터 테이블을 가지고 있음
  • 파일 디스크립터 테이블에는 파일 디스크립터가 저장되어 있음
  • 파일 디스크립터 테이블은 프로세스가 생성될 때 기본적으로 0, 1, 2에 해당하는 파일 디스크립터가 매핑됨

redirection 

명령어 설명
명령어 1 > output.log(="명령어>output.log") 표준 출력을 output.log 파일에 저장
명령어 2 > error.log 표준 에러를 error.log 파일에 저장
명령어 0 < input.log(="명령어<input.log") 표준 입력을 input.log 파일에서 가져오기
명령어 2>&1 표준 에러(2)를 표준 출력(1) 파일 디스크립터가 참조하는 곳으로 보내기
명령어 1>&2 표준 출력(1)을 표준 에러(2) 파일 디스크립터가 참조하는 곳으로 보내기
명령어 > /dev/null 표준 출력을 표시하지 않고 표준 에러는 표시
명령어 > /dev/null 2>&1 표준 에러를 표준 출력으로 보내어 표준 출력과 표준 에러 모두 표시 안함

 

REFERENCE

https://dev-ahn.tistory.com/96

 

리눅스 - 파일 디스크립터

File Descriptor (파일 디스크립터) [출처: http://dev.plusblog.co.kr/22] 1. 파일 디스크립터 - 시스템으로부터 할당 받은 파일을 대표하는 0이 아닌 정수 값 - 프로세스에서 열린 파일의 목록을 관리하는 테

dev-ahn.tistory.com

https://architectophile.tistory.com/8

 

[리눅스] 명령 실행 원리 1 : 파일 디스크립터와 데이터 흐름

[리눅스] 명령 실행 원리 1 : 파일 디스크립터(file descriptor)와 데이터 흐름(data flow) 1. 파일 디스크립터(File Descriptors) 유닉스(Unix)에서는 기본적으로 입력(input)을 터미널 키보드와 연결시키고 출..

architectophile.tistory.com

https://icarus8050.tistory.com/122

 

[Linux] 파일 디스크립터 (File Descriptor)

파일 디스크립터  유닉스 계열의 시스템에서는 모든 것을 파일로 관리합니다. 이러한 유닉스 시스템에서 프로세스들은 파일 디스크립터를 이용하여 다른 IO 장치, 네트워크 소켓, pipe 등과 같은

icarus8050.tistory.com

https://blog.gaerae.com/2014/10/linux-file-descriptor.html

 

리눅스 파일 디스크립터(Linux File descriptor)

파일 디스크립터 간략한 설명과 /dev/null 2>&1 에대한 의미 이해하기

blog.gaerae.com