6. 파일 디스크립터(File Descriptor)

박은서's avatar
Apr 27, 2026
6. 파일 디스크립터(File Descriptor)

1. 파일 디스크립터(File Descriptor)

1️⃣ 파일 디스크립터란?

1) 개념

  • 운영체제가 파일을 관리하기 위해 사용하는 번호(식별자)
  • 파일의 “번호표”

2) 핵심 한 줄

  • “프로그램이 파일을 직접 다루는 게 아니라, 번호로 간접 접근한다”

2️⃣ 파일 디스크립터의 필요성

1) 문제 상황

  • 프로그램이 파일을 직접 관리하면 복잡함
  • 파일 종류도 다양함 (텍스트, 이미지, 네트워크 등)

2) 해결 방법

  • OS가 대신 관리하고 프로그램에는 번호만 줌
➡️ 그래서 프로그램은 “파일”이 아니라 “번호”로 작업함

3️⃣ 비유로 이해하기

1) 카페 진동벨

  • 주문하면 → 진동벨 받음
  • 음식 나오면 → 번호로 찾음
⬇️
  • 음식 = 파일
  • 진동벨 번호 = 파일 디스크립터
“파일 대신 번호로 관리하는 시스템”

4️⃣ 기본 구조

1) 흐름

  1. 프로그램이 파일 열기 요청 (open)
  1. OS가 파일을 열고 번호 부여
  1. 프로그램은 그 번호로 읽기/쓰기
파일 → 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