42Seoul/get_next_line

1. 파일 디스크립터(file Descriptors)

재윤 2023. 4. 8. 20:58
반응형

파일 디스크립터(FD, File Descriptor)

Unix OS에서 네트워크 소켓과 같은 파일이나 기타 입력/출력 리소스에 액세스 하는 데 사용되는 추상 표현이다.

즉, 시스템으로 부터 할당받은 파일이나 소켓을 대표하는 정수다.

  • 파일을 대표하기 위해 시스템으로부터 할당 받은 음수가 아닌 0과 양수인 정수 값(Non-negative Integer)
  • 프로세스에서 열린 파일의 목록을 관리하는 테이블의 인덱스

유닉스 시스템에서 모든 것이 파일이다.

• 정규 파일(Regularfile), 디렉토리(Directory), 소켓(Socket), 파이프(PIPE), 블록 디바이스(Block Device), 캐릭터 디바이스(Character Device) 등등 모든 객체들을 파일로써 관리된다

• 유닉스 시스템에서 프로세스가 이 파일들을 접근할 때 File Descriptor라는 개념을 이용한다

응용 프로세스가 파일을 열거나 생성 하게 되면 정수로 된 파일 디스크립터를 얻게 되는데 이 파일 디스크립터는 이후에 일어난 모든 파일 동작 즉, 읽기(read), 쓰기 (write), 파일 동작 제어(fnctl 함수), 파일 닫기(close 함수) 등의 동작에서 그 파일을 가리키는데 사용된다.

파일 디스크립터 종류

FD의 0번에서 2번까지는 고정되어 있다. (unistd.h 헤더파일에 명시) 각 Unix 프로세스는 세 가지 standard streams에 해당하는 고정된 standard POSIX file descriptors를 가진다.

표준입력 및 표준출력도 파일 디스크립터로 표현이 되는데 이들은 프로그램이 시작되면 기본적으로 열리고, 종료 시 자동으로 닫힌다.

  • 표준 입력(Standard Input) : File Descriptor 0
  • 표준 출력(Standard Output) : File Descriptor 1
  • 표준 에러 출력(Standard Error) : File Descriptor 2

파일 디스크립터가 단순히 숫자인 이유는 프로세스가 유지하고 있는 file descriptors 테이블의 인덱스이기 때문이다.

파일 오픈 or 소켓생성 시 부여되는 파일 디스크립터는 3부터 시작한다.

프로세스가 실행 중에 파일을 Open 하면 커널은 해당 프로세스의 파일 디스크립터 숫자 중에 사용하지 않는 가장 작은 값을 할당해 준다.

그 다음 프로세스가 열려있는 파일에 시스템 콜을 이용해서 접근할 때, 파일 디스크립터 값을 이용해 파일을 지칭할 수 있다.

 

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

 

파일 디스크립터

file descriptors 테이블의 각 항목은 FD 플래그와 파일 테이블로의 포인터를 가지고 있다.

이 포인터를 이용하여 FD 를 통해 시스템의 파일을 참조 할 수 있는 것이다.

프로세스는 이런 FD 테이블과 파일 테이블의 정보를 직접 고칠 수 없으며, 반드시 커널을 통해서 수정을 해야 한다.

 

참고 블로그

get_next_line() 뽀개기 by suhshin

 

get_next_line() 뽀개기 by suhshin

Subject

80000coding.oopy.io

반응형