파일 디스크립터란?

흔히 유닉스 시스템에서 모든 것은 파일이라고 한다. 일반적인 정규파일(Regular File)에서부터 디렉토리(Directory), 소켓(Socket), 파이프(PIPE), 블록 디바이스, 캐릭터 디바이스 등등 모든 객체들은 파일로써 관리된다. 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때에 파일 디스크립터(File Descriptor)라는 개념을 이용한다.

응용 프로세스가 파일을 열거나 생성 하게 되면 정수로 된 파일 디스크립터를 얻게 되는데 이 파일 디스크립터는 이후에 일어나는 모든 파일 동작 즉, 읽기(read()), 쓰기(write()), 파일 동작제어(fcntl()), 파일 닫기(close())등의 동작에서 그 파일을 가리키는데 사용된다. 0, 1, 2는 프로세스가 메모리에서 실행을 시작할때 기본적으로 할당되는 파일 디스크립터이다.

기본적으로 할당되는 파일 디스크립터

그러므로 우리가 생성하는 파일 디스크립터들은 3번부터 차례대로 할당받게 된다.

쉽게 생각하면, 파일 디스크립터는 파일을 다루기 위해서 해당파일의 주소를 참조하여 접근하는 형태라고 생각하면 된다.

파일 디스크립터를 확인해보자

우선 파일 디스크립터를 확인하기 전에 필요한 함수를 살펴보자.

open(pathname, flags, mode) //return fd