νμΌ λμ€ν¬λ¦½ν°(File Descriptor)
- μ΄μ체μ κ° νμΌμ μλ³νκΈ° μν΄ μ¬μ©νλ μ μν κ°μ λλ€. νμΌ λμ€ν¬λ¦½ν°λ νμΌ, μμΌ, νμ΄ν λ± λ€μν μ μΆλ ₯ μμμ ꡬλΆνλ λ° μ¬μ©λ©λλ€.
- νλ‘κ·Έλ¨μ΄ νμΌμ μ΄λ©΄ μ΄μ체μ λ ν΄λΉ νμΌμ μλ³ν μ μλ νμΌ λμ€ν¬λ¦½ν°λ₯Ό μμ±νμ¬ νλ‘κ·Έλ¨μ μ 곡ν©λλ€.
νμΌ λμ€ν¬λ¦½ν°μ μ£Όμ κ°λ κ³Ό νΉμ§
- νμΌ λμ€ν¬λ¦½ν°μ μν
- νμΌ λμ€ν¬λ¦½ν°λ μ΄μ체μ κ° μ΄λ € μλ νμΌμ κ΄λ¦¬νκ³ μ κ·Όνλ λ° μ¬μ©νλ μλ³μμ λλ€.
- νμΌ λμ€ν¬λ¦½ν°λ₯Ό ν΅ν΄ νλ‘κ·Έλ¨μ νΉμ νμΌμ μ κ·Όνκ³ , μ½κΈ°, μ°κΈ°, λ«κΈ° λ±μ μμ μ μνν μ μμ΅λλ€.
- νμΌ λμ€ν¬λ¦½ν°μ κΈ°λ³Έ κ°
- μ λμ€ κ³μ΄ μ΄μ체μ μμ 0, 1, 2λ νμ€ νμΌ λμ€ν¬λ¦½ν°λ‘ μμ½λμ΄ μμ΅λλ€.
- 0 (νμ€ μ λ ₯): ν€λ³΄λλ λ€λ₯Έ μ λ ₯ μ₯μΉλ‘λΆν° λ°μ΄ν°λ₯Ό μ λ ₯ λ°μ΅λλ€.
- 1 (νμ€ μΆλ ₯): νλ©΄μ΄λ μ½μμ μΆλ ₯μ ν©λλ€.
- 2 (νμ€ μ€λ₯): μλ¬ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
- μλ₯Ό λ€μ΄, printf ν¨μλ κΈ°λ³Έμ μΌλ‘ νμ€ μΆλ ₯ νμΌ λμ€ν¬λ¦½ν°(1)λ₯Ό ν΅ν΄ νλ©΄μ λ°μ΄ν°λ₯Ό μΆλ ₯ν©λλ€.
- μ λμ€ κ³μ΄ μ΄μ체μ μμ 0, 1, 2λ νμ€ νμΌ λμ€ν¬λ¦½ν°λ‘ μμ½λμ΄ μμ΅λλ€.
- νμΌ λμ€ν¬λ¦½ν°μ μμ±κ³Ό κ΄λ¦¬
- νλ‘κ·Έλ¨μ΄ νμΌμ μ΄ λλ§λ€ μ΄μ체μ λ μλ‘μ΄ νμΌ λμ€ν¬λ¦½ν°λ₯Ό μμ±νμ¬ ν΄λΉ νμΌμ μ κ·Όν μ μκ² ν©λλ€.
- νμΌ μμ μ΄ λλλ©΄ νμΌμ λ«μμΌ νλ©°, μ΄λ μ΄μ체μ λ ν΄λΉ νμΌ λμ€ν¬λ¦½ν°λ₯Ό ν΄μ νμ¬ λ€λ₯Έ νμΌμ μν λμ€ν¬λ¦½ν°λ‘ μ¬μ¬μ©ν μ μλλ‘ ν©λλ€.
νμΌ λμ€ν¬λ¦½ν°μ μ¬μ© μ
- νμΌ μ΄κΈ°:
- open ν¨μλ₯Ό μ¬μ©νμ¬ νμΌμ μ΄λ©΄ μ΄μ체μ λ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ°νν©λλ€.
- μλ₯Ό λ€μ΄, int fd = open("example.txt", O_RDONLY);μ κ°μ μ½λμμ fdλ example.txt νμΌμ νμΌ λμ€ν¬λ¦½ν°μ λλ€.
- νμΌ μ½κΈ° λ° μ°κΈ°:
- νμΌ λμ€ν¬λ¦½ν°λ₯Ό μ¬μ©νμ¬ readμ write ν¨μλ₯Ό ν΅ν΄ νμΌμ λ°μ΄ν°λ₯Ό μ½κ³ μΈ μ μμ΅λλ€.
- μλ₯Ό λ€μ΄, read(fd, buffer, size);μ κ°μ΄ νμΌ λμ€ν¬λ¦½ν° fdλ₯Ό μ¬μ©νμ¬ λ°μ΄ν°λ₯Ό μ½μ΅λλ€.
- νμΌ λ«κΈ°:
- νμΌ μμ μ΄ λλ νμλ close ν¨μλ₯Ό ν΅ν΄ νμΌ λμ€ν¬λ¦½ν°λ₯Ό λ«μμΌ ν©λλ€. μλ₯Ό λ€μ΄, close(fd);λ fdλ‘ μ΄λ¦° νμΌμ λ«μ΅λλ€.
- νμΌμ λ«μ§ μμΌλ©΄ **리μμ€ λμ(Resource Leak)**κ° λ°μν μ μμΌλ©°, μ΄λ μμ€ν μ±λ₯μ μν₯μ μ€ μ μμ΅λλ€.
νμΌ λμ€ν¬λ¦½ν°μ νΉμ§κ³Ό μ₯μ
- μΆμνλ μΈν°νμ΄μ€:
- νμΌ λμ€ν¬λ¦½ν°λ νμΌ, μμΌ, νμ΄ν λ± λͺ¨λ μ μΆλ ₯ μμμ λμΌν λ°©μμΌλ‘ λ€λ£° μ μκ² ν©λλ€. μ΄λ‘ μΈν΄ νλ‘κ·Έλ¨μ νμΌ μμ μ λμΌν μΈν°νμ΄μ€λ‘ μ²λ¦¬ν μ μμ΅λλ€.
- ν¨μ¨μ μΈ μμ κ΄λ¦¬:
- μ΄μ체μ λ νμΌ λμ€ν¬λ¦½ν°λ₯Ό ν΅ν΄ κ° νλ‘μΈμ€μ μ΄λ¦° νμΌμ ν¨μ¨μ μΌλ‘ κ΄λ¦¬νκ³ , νμν κ²½μ° μμμ μ¬μ¬μ©ν μ μμ΅λλ€.
- νμ€νλ μ κ·Ό λ°©μ:
- μ λμ€ κ³μ΄ μμ€ν μμλ λͺ¨λ μ μΆλ ₯μ νμΌ λμ€ν¬λ¦½ν°λ₯Ό ν΅ν΄ μ κ·Όνλλ‘ νμ¬, λ€μν μ₯μΉμ μμμ μΌκ΄λ μ κ·Ό λ°©λ²μ μ 곡ν©λλ€.
'π« Krafton Jungle > PintOS Project2 _ User Programs' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| μμ λ° λ³΄μ νμ - rax register (1) | 2024.11.28 |
|---|---|
| μμ λ° λ³΄μ νμ - Atomic Operation (0) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | System Call (1) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | User Stack (0) | 2024.11.28 |
| [Pintos] Project02 _ User Programs | Keyword | Register VS Memory (0) | 2024.11.28 |