[JAVA]File Descriptor, FD란?

무지성개발자·2023년 8월 14일
0

File Descriptor 정의

주로 Unix기반 OS에서 사용되는 용어이며, 윈도우에서는 Handle이란 개념이 사용된다.

File Descriptord(이하 FD)파일이나 입출력 장치와의 상호 작용을 추상화하는 개념이다. FD는 파일이나 장치를 나타내는 숫자로, 프로세스가 해당 파일이나 장치에 접근하고 조작할 수 있도록 한다. FD는 정수로 표현되며, 프로세스는 이 FD를 사용하여 파일을 읽거나 쓰는 등의 작업을 한다.

Unix 시스템에서는 모든 것이 파일인데 여기에 접근하려고 쓰는게 FD라고 생각하면 좀 이해하기 편할 것 같다.

FD 확인

Unix계열 OS에서 확인 할 수 있다.

# 아무 PID 확인
$ ps -ef

$ sudo ls -l /proc/{PID}/fd

끝에 부분 정수 -> ...여기 부분에 주목하자.

FD는 포인터의 개념이며 정수로 표현한다고 했다. 3,6번 FD는 소켓을 가르키고 있고 나머지는 각 파일들을 가르키고 있다.

여기서 주목해야하는 건 0,1,2다.

  • 표준 입력 (Standard Input - stdin): 키보드로 입력하는 데이터 표시. 보통 0 사용.

  • 표준 출력 (Standard Output - stdout): 프로세스의 출력이 표시되는 장치. 보통 1 사용.

  • 표준 오류 (Standard Error - stderr): 프로세스에서 발생하는 오류 메시지가 표시되는 장치. 보통 2 사용.

FD가 파일을 처리하는 방법

  • open() : 파일을 여는 함수. 파일을 열 때, 시스템은 새로운 FD를 할당. 이 FD를 사용하여 파일을 읽거나 씀.

  • read()와 write() : FD를 통해 데이터를 읽거나 쓰기 위한 함수.

  • close() : 할당 된 FD를 닫는 함수. 프로세스가 해당 파일이나 장치와의 연결을 끊는 것을 말함. close를 하지 않는다면 FD를 계속 사용하고 있어서 리소스 낭비, 메모리낭비가 있어 사용 후 반드시 close를 해야한다.


자바의 FD

자바에서 말하는 file descriptor는 네이티브 코드와의 상호 작용을 위한 인덱스 또는 핸들로 사용되는 값으로 FD와는 약간 다르다.

보통 자바에서 파일과 리소스를 다루기 위해 FileInputStream, FileOutputStream, RandomAccessFile 클래스를 사용하는데 모두 내부적으로 native 코드와 상호작용하여 파일 작업을 수행한다.


한 줄평 : 자세히 정리 하고 싶어도 아직 겉핡기 정도밖에 이해하지 못해 이정도로 마친다.

profile
no-intelli 개발자 입니다. 그래도 intellij는 씁니다.

0개의 댓글