file descriptor (fd)가 왜 int 형인지 궁금하신 거죠? 쉽게, 그리고 핵심만 쏙쏙 알려드릴게요!

 

 

🔍 file descriptor란?

  • 리눅스/유닉스에서 모든 것은 "파일"로 취급돼요:
    • 일반 파일, 디바이스, 파이프, 소켓 등등
  • file descriptor(fd)는 커널이 파일을 열었을 때 그 파일을 가리키는 식별 번호예요.
  • 그래서 우리가 open(), socket() 같은 함수 쓰면 정수형 fd를 리턴해줘요.

 

 

💡 왜 int형일까?

1. 속도, 효율

  • int는 CPU가 다루기 가장 쉬운 타입 → 빠름!
  • 정수 하나만 관리하면 되니까, 간단하고 가볍다.

 

 

2. 리눅스 커널의 내부 구조

  • 커널은 각 프로세스마다 파일 디스크립터 테이블을 갖고 있어요.
  • 이 테이블은 그냥 배열이에요: fd_table[0], fd_table[1], ...
  • 그래서 fd = 3이면 → fd_table[3]을 바로 참조 가능! → 포인터 없이도 쉽게 접근 가능하니까 정수형이 딱 적합

 

3. 표현 범위가 충분

  • 보통 OS에서 동시에 여는 파일 수는 제한이 있어요 (예: 1024개)
  • int형이면 수천~수십억까지 표현 가능하니까 충분함

 

4. 호환성과 역사

  • 유닉스 시절부터 내려온 전통적 설계
  • C 언어와 잘 맞고, 시스템 콜도 모두 int 기반으로 설계됨

 

🎯 정리

이유 설명
✅ 효율 정수는 CPU가 다루기 쉽고 빠름
✅ 구조 커널의 파일 테이블을 배열처럼 접근
✅ 충분한 범위 열 수 있는 파일 수를 커버하기에 충분
✅ 전통적 설계 유닉스 시대부터 쭉 이어진 구조

+ Recent posts