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