OS(Operation System)/Linux

[Linux] File Descriptor의 개념과 이해

Soondo.Kwon 2022. 1. 23. 17:05

1. 개념

파일 디스크립터(File Descriptor)란 리눅스 혹은 유닉스 계열의 시스템에서 프로세스(Process)가 파일(File)을 다룰 때 사용하는 개념으로, 프로세스에서 특정 파일에 접근할 때  사용하는 추상적인 값이다. 파일 디스크립터는 일반적으로 0이 아닌 정수값을 갖는다.

흔히 유닉스 시스템에서 모든 것을 파일이라고 지칭한다. 일반적인 정규파일부터 디렉토리, 소켓, 파이프, 블록 디바이스, 케릭터 디바이스 등 모든 객체들을 파일로 관리한다. 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 파일 디스크립터라는 개념을 이용한다. 프로세스가 실행 중에 파일을 Open하면 커널을 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해준다. 그 다음 프로세스가 열려있는 파일에 시스템콜을 이용해서 접근할 때, 파일 디스크립터(FD)값을 이용해서 파일을 지칭할 수 있다.

프로그램이 프로세스로 메모리에서 실행될 때, 기본적으로 할당되는 파일 디스크립터는 표준입력(Standard Input), 표준출력(Standard Output), 표준에러(Standard Error)이며 이들에게 각각 0, 1, 2라는 정수가 할당된다.

 

 

* 참고사항

  • 블록 디바이스(Block Device)
    보통 하드디스크나 CD/DVD, 플로피디스크 등의 장치를 말하며, 블록이나 섹터 등의 정해진 단위로 데이터를 전송합니다. I/O 전송속도가 높은 것이 특징이다.
  • 캐릭터 디바이스(Chracter Device)
    키보드, 마우스, 테이프, 모니터, 프린터 등의 장치가 있으며, byte 단위로 데이터를 전송한다. I/O 전송속도가 다소 느릴 수도 있으나, 어플리케이션단에서 버퍼링을 제어하므로, 성능에 따라 차이가 있을 수 있다.

참고사이트