TIL(Today I Learned)

[TIL - 1주차] 파일 디스크립터(File Descriptor)

lungjae 2025. 7. 11. 18:22

파일 디스크립터는 파일을 열 때 반환되는 고유한 값으로, 이 값을 통해

  • OS는 파일의 위치나 상태, 열린 모드 등을 추적할 수 있으며,
  • 사용자 프로그램은 파일을 읽고 쓰거나 네트워크 통신을 할 수 있습니다.

 

파일 디스크립터가 사용되는 경우

파일을 열 때: 사용자가 파일을 열 때, OS에 시스템 콜(open())을 보내어 파일을 여는데, 이 때 OS는 값(파일 디스크립터)을 반환합니다. 이 때 반환되는 값은 열린 파일을 식별할 수 있는 고유한 정수값입니다.

 

각각의 프로세스는 자신만의 파일 디스크립터 테이블을 가지고있으며, OS는 각 프로세스의 테이블을 통해 해당 프로세스의 테이블 안에있는 디스크립터들이 가리키는 파일 정보를 추적할 수 있게됩니다.

 

 

파일을 읽거나 쓸 때: 파일을 연 후에, 파일 디스크립터를 통해 파일을 읽거나 쓰는 작업도 할 수 있습니다. 이 과정 마찬가지로 시스템 콜(read(), write())을 통해 OS에게 파일 디스크립터값을 받은 후에 이루어지는 작업입니다. 이 때 반환되는 값은 read()의 경우 읽은 바이트 수, write()의 경우 해당 파일에 기록된 바이트 수이며, 기존 파일에 write()작업을 수행한 경우라면 추가적으로 쓰기 작업을 한 부분에 대한 바이트 수를 반환합니다.

 

 

파일을 닫을 때: 작업을 마치고 나면 다시 시스템 콜(close())을 통해 OS로부터 '파일을 닫는 파일 디스크립터 값'을 받아 파일을 닫습니다. 이 때 반환되는 값은 0(성공)입니다.

 

파일 디스크립터가 더 이상 필요하지 않을 경우, close()를 통해 파일 디스크립터를 해제하여 리소스를 효율적으로 관리합니다.

 

또한 open()이든, read()든, write()든, close()든, 시스템 콜이 실패할 경우에는 공통적으로 -1을 반환하며, 상황에 맞게 에러 메시지를 분석하고 어떤 에러인지 파악하여 적절하게 대처해야합니다.

 

 


 

표준 파일 디스크립터(Standard File Descriptor)

표준 파일 디스크립터는 일반적인 파일 디스크립터와는 다릅니다. 표준 파일 디스크립터는 OS가 가장 기본적으로 제공하는 디스크립터이고, 일반적인 파일 디스크립터는 OS가 해당 파일을 고유하게 식별할 수 있도록 부여하는 식별자입니다.

 

표준 파일 디스크립터는 OS가 가장 기본적으로 제공하는 파일 디스크립터로, OS는 프로그램 시작 시 가장 먼저 세 개의 표준 파일 디스크립터를 할당합니다.

 

표준 입력(stdin): 프로그램이 사용자로부터 입력받을 때 사용하는 표준 입력 스트림으로, 이 때 표준 파일 디스크립터는 0입니다.

표준 출력(stdout): 프로그램의 출력을 표시하는 표준 출력 스트림으로, 이 때 표준 파일 디스크립터는 1입니다.

표준 에러(stderr): 프로그램의 에러 메시지를 표시하는 표준 에러 스트림으로, 이 때 표준 파일 디스크립터는 2입니다.

 

 


 

비동기 작업에서의 파일 디스크립터

파일 디스크립터는 동기식 I/O, 비동기식 I/O 등 다양한 I/O모델에서 또한 중요합니다. 예를 들어 비동기식 I/O모델에서는 여러 파일 디스크립터를 동시에 관리합니다. 이를 통해 비동기식 파일 작업을 처리할 수 있습니다.

 

select(), poll(), epoll()과 같은 시스템 콜을 통해 여러 파일 디스크립터를 동시에 모니터링하고, I/O 작업이 가능한 파일 디스크립터에 대해서만 일괄적으로 작업을 수행함으로써 I/O작업을 효율적으로 처리할 수 있습니다.