μˆ˜μ • 및 보완 ν•„μš” - File Descriptor

파일 λ””μŠ€ν¬λ¦½ν„°(File Descriptor)

  • μš΄μ˜μ²΄μ œκ°€ νŒŒμΌμ„ μ‹λ³„ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” μ •μˆ˜ν˜• κ°’μž…λ‹ˆλ‹€. 파일 λ””μŠ€ν¬λ¦½ν„°λŠ” 파일, μ†ŒμΌ“, νŒŒμ΄ν”„ λ“± λ‹€μ–‘ν•œ μž…μΆœλ ₯ μžμ›μ„ κ΅¬λΆ„ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€.
  • ν”„λ‘œκ·Έλž¨μ΄ νŒŒμΌμ„ μ—΄λ©΄ μš΄μ˜μ²΄μ œλŠ” ν•΄λ‹Ή νŒŒμΌμ„ 식별할 수 μžˆλŠ” 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό μƒμ„±ν•˜μ—¬ ν”„λ‘œκ·Έλž¨μ— μ œκ³΅ν•©λ‹ˆλ‹€.

 

파일 λ””μŠ€ν¬λ¦½ν„°μ˜ μ£Όμš” κ°œλ…κ³Ό νŠΉμ§•

  1. 파일 λ””μŠ€ν¬λ¦½ν„°μ˜ μ—­ν• 
    • 파일 λ””μŠ€ν¬λ¦½ν„°λŠ” μš΄μ˜μ²΄μ œκ°€ μ—΄λ € μžˆλŠ” νŒŒμΌμ„ κ΄€λ¦¬ν•˜κ³  μ ‘κ·Όν•˜λŠ” 데 μ‚¬μš©ν•˜λŠ” μ‹λ³„μžμž…λ‹ˆλ‹€.
    • 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 톡해 ν”„λ‘œκ·Έλž¨μ€ νŠΉμ • νŒŒμΌμ— μ ‘κ·Όν•˜κ³ , 읽기, μ“°κΈ°, λ‹«κΈ° λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  2. 파일 λ””μŠ€ν¬λ¦½ν„°μ˜ κΈ°λ³Έ κ°’
    • μœ λ‹‰μŠ€ 계열 μš΄μ˜μ²΄μ œμ—μ„œ 0, 1, 2λŠ” ν‘œμ€€ 파일 λ””μŠ€ν¬λ¦½ν„°λ‘œ μ˜ˆμ•½λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.
      • 0 (ν‘œμ€€ μž…λ ₯): ν‚€λ³΄λ“œλ‚˜ λ‹€λ₯Έ μž…λ ₯ μž₯μΉ˜λ‘œλΆ€ν„° 데이터λ₯Ό μž…λ ₯ λ°›μŠ΅λ‹ˆλ‹€.
      • 1 (ν‘œμ€€ 좜λ ₯): ν™”λ©΄μ΄λ‚˜ μ½˜μ†”μ— 좜λ ₯을 ν•©λ‹ˆλ‹€.
      • 2 (ν‘œμ€€ 였λ₯˜): μ—λŸ¬ λ©”μ‹œμ§€λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, printf ν•¨μˆ˜λŠ” 기본적으둜 ν‘œμ€€ 좜λ ₯ 파일 λ””μŠ€ν¬λ¦½ν„°(1)λ₯Ό 톡해 화면에 데이터λ₯Ό 좜λ ₯ν•©λ‹ˆλ‹€.
  3. 파일 λ””μŠ€ν¬λ¦½ν„°μ˜ 생성과 관리
    • ν”„λ‘œκ·Έλž¨μ΄ νŒŒμΌμ„ μ—΄ λ•Œλ§ˆλ‹€ μš΄μ˜μ²΄μ œλŠ” μƒˆλ‘œμš΄ 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό μƒμ„±ν•˜μ—¬ ν•΄λ‹Ή νŒŒμΌμ— μ ‘κ·Όν•  수 있게 ν•©λ‹ˆλ‹€.
    • 파일 μž‘μ—…μ΄ λλ‚˜λ©΄ νŒŒμΌμ„ λ‹«μ•„μ•Ό ν•˜λ©°, μ΄λ•Œ μš΄μ˜μ²΄μ œλŠ” ν•΄λ‹Ή 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό ν•΄μ œν•˜μ—¬ λ‹€λ₯Έ νŒŒμΌμ„ μœ„ν•œ λ””μŠ€ν¬λ¦½ν„°λ‘œ μž¬μ‚¬μš©ν•  수 μžˆλ„λ‘ ν•©λ‹ˆλ‹€.

 

파일 λ””μŠ€ν¬λ¦½ν„°μ˜ μ‚¬μš© 예

  1. 파일 μ—΄κΈ°:
    • open ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ νŒŒμΌμ„ μ—΄λ©΄ μš΄μ˜μ²΄μ œλŠ” 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, int fd = open("example.txt", O_RDONLY);와 같은 μ½”λ“œμ—μ„œ fdλŠ” example.txt 파일의 파일 λ””μŠ€ν¬λ¦½ν„°μž…λ‹ˆλ‹€.
  2. 파일 읽기 및 μ“°κΈ°:
    • 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό μ‚¬μš©ν•˜μ—¬ read와 write ν•¨μˆ˜λ₯Ό 톡해 νŒŒμΌμ— 데이터λ₯Ό 읽고 μ“Έ 수 μžˆμŠ΅λ‹ˆλ‹€.
    • 예λ₯Ό λ“€μ–΄, read(fd, buffer, size);와 같이 파일 λ””μŠ€ν¬λ¦½ν„° fdλ₯Ό μ‚¬μš©ν•˜μ—¬ 데이터λ₯Ό μ½μŠ΅λ‹ˆλ‹€.
  3. 파일 λ‹«κΈ°:
    • 파일 μž‘μ—…μ΄ λλ‚œ ν›„μ—λŠ” close ν•¨μˆ˜λ₯Ό 톡해 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό λ‹«μ•„μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, close(fd);λŠ” fd둜 μ—΄λ¦° νŒŒμΌμ„ λ‹«μŠ΅λ‹ˆλ‹€.
    • νŒŒμΌμ„ λ‹«μ§€ μ•ŠμœΌλ©΄ **λ¦¬μ†ŒμŠ€ λˆ„μˆ˜(Resource Leak)**κ°€ λ°œμƒν•  수 있으며, μ΄λŠ” μ‹œμŠ€ν…œ μ„±λŠ₯에 영ν–₯을 쀄 수 μžˆμŠ΅λ‹ˆλ‹€.

 

파일 λ””μŠ€ν¬λ¦½ν„°μ˜ νŠΉμ§•κ³Ό μž₯점

  • μΆ”μƒν™”λœ μΈν„°νŽ˜μ΄μŠ€:
    • 파일 λ””μŠ€ν¬λ¦½ν„°λŠ” 파일, μ†ŒμΌ“, νŒŒμ΄ν”„ λ“± λͺ¨λ“  μž…μΆœλ ₯ μžμ›μ„ λ™μΌν•œ λ°©μ‹μœΌλ‘œ λ‹€λ£° 수 있게 ν•©λ‹ˆλ‹€. 이둜 인해 ν”„λ‘œκ·Έλž¨μ€ 파일 μž‘μ—…μ„ λ™μΌν•œ μΈν„°νŽ˜μ΄μŠ€λ‘œ μ²˜λ¦¬ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 효율적인 μžμ› 관리:
    • μš΄μ˜μ²΄μ œλŠ” 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 톡해 각 ν”„λ‘œμ„ΈμŠ€μ˜ μ—΄λ¦° νŒŒμΌμ„ 효율적으둜 κ΄€λ¦¬ν•˜κ³ , ν•„μš”ν•œ 경우 μžμ›μ„ μž¬μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν‘œμ€€ν™”λœ μ ‘κ·Ό 방식:
    • μœ λ‹‰μŠ€ 계열 μ‹œμŠ€ν…œμ—μ„œλŠ” λͺ¨λ“  μž…μΆœλ ₯을 파일 λ””μŠ€ν¬λ¦½ν„°λ₯Ό 톡해 μ ‘κ·Όν•˜λ„λ‘ ν•˜μ—¬, λ‹€μ–‘ν•œ μž₯μΉ˜μ™€ μžμ›μ— μΌκ΄€λœ μ ‘κ·Ό 방법을 μ œκ³΅ν•©λ‹ˆλ‹€.