1. 파일 디스크립터(File Descriptor)
1️⃣ 파일 디스크립터란?
1) 개념
- 운영체제가 파일을 관리하기 위해 사용하는 번호(식별자)
- 파일의 “번호표”
2) 핵심 한 줄
- “프로그램이 파일을 직접 다루는 게 아니라, 번호로 간접 접근한다”
2️⃣ 파일 디스크립터의 필요성
1) 문제 상황
- 프로그램이 파일을 직접 관리하면 복잡함
- 파일 종류도 다양함 (텍스트, 이미지, 네트워크 등)
2) 해결 방법
- OS가 대신 관리하고 프로그램에는 번호만 줌
➡️ 그래서 프로그램은 “파일”이 아니라 “번호”로 작업함
3️⃣ 비유로 이해하기
1) 카페 진동벨
- 주문하면 → 진동벨 받음
- 음식 나오면 → 번호로 찾음
⬇️
- 음식 = 파일
- 진동벨 번호 = 파일 디스크립터
“파일 대신 번호로 관리하는 시스템”
4️⃣ 기본 구조
1) 흐름
- 프로그램이 파일 열기 요청 (open)
- OS가 파일을 열고 번호 부여
- 프로그램은 그 번호로 읽기/쓰기
파일 → OS → 번호(fd) → 프로그램
5️⃣ 대표적인 기본 FD
1) 자동으로 존재하는 3개
번호 | 이름 | 의미 |
0 | stdin | 입력 (키보드) |
1 | stdout | 출력 (화면) |
2 | stderr | 에러 출력 |
- 예시
echo hello➡️ stdout(1)으로 출력됨
6️⃣ 주요 동작
1) 파일 열기
int fd = open("test.txt", O_RDONLY);- fd라는 번호 받음
2) 읽기
read(fd, buffer, size);
3) 쓰기
write(fd, buffer, size);
4) 닫기
close(fd);
핵심 : 모든 작업은 fd 기준으로 진행됨
7️⃣ 특징
1) 정수(int) 값이다
- 0, 1, 2, 3, 4…
2) 프로세스마다 따로 관리
- 같은 파일이어도 fd는 다름
3) 파일뿐 아니라 다양한 것 포함
- 파일
- 소켓 (네트워크)
- 파이프
➡️ “입출력 대상은 전부 fd로 통일”
8️⃣ 왜 중요한가?
1) 리눅스/유닉스 핵심 개념
- 모든 입출력 = 파일처럼 처리
2) 서버 개발에서 필수
- 네트워크 소켓도 fd로 처리됨
3) 리다이렉션 가능
ls > out.txt→ stdout(1)을 파일로 변경
9️⃣ 한방 정리
- 파일 디스크립터 = 파일을 대신하는 번호
- OS가 파일 관리 → 프로그램은 번호로 접근
- 입력/출력/네트워크 전부 동일한 방식
Share article