[get_next_line][C] νμΌ λμ€ν¬λ¦½ν°(File Descriptor)
νμΌ λμ€ν¬λ¦½ν°(File Descriptor)
- νμΌ λμ€ν¬λ¦½ν°λ νλ‘μΈμ€κ° νμΌμ΄λ μμμ μ κ·Όν λ μ¬μ©νλ λ²νΈνλ€.
- μ λμ€λ 리λ μ€ μμ€ν μμ κ±°μ λͺ¨λ κ²μ 'νμΌ'λ‘ λ³Έλ€.
- νμ€μ λ ₯(0), νμ€μΆλ ₯(1), νμ€μλ¬(2)κ° κΈ°λ³ΈμΌλ‘ μ£Όμ΄μ§λ€.
- νλ‘μΈμ€κ° μλ‘μ΄ νμΌμ μ΄λ©΄, 컀λμ΄ κ°μ₯ μμ μ¬μ© κ°λ₯ν λ²νΈλ₯Ό ν λΉνλ€.
- μ΄ λ²νΈλ₯Ό μ΄μ©ν΄ νλ‘μΈμ€λ νμΌμ΄λ μμΌ, νμ΄ν λ± λ€μν μμμ μ κ·Όν μ μλ€.
1. μ λμ€μμλ "λͺ¨λ κ² νμΌμ΄λ€"
- λ¨μν νμΌλΏ μλλΌ λλ ν 리, μμΌ, νμ΄ν, μ₯μΉ λ±λ μ λΆ νμΌμ²λΌ λ€λ£¬λ€.
- κ·Έλμ 무μΈκ°μ ν΅μ νκ±°λ μ½κ³ μΈ λλ νμ "νμΌμ²λΌ λ€λ£¨κΈ°" μν΄ νμΌ λμ€ν¬λ¦½ν°λ₯Ό μ¬μ©νλ€.
2. νμΌ λμ€ν¬λ¦½ν°λ μ μκ°(λ²νΈ)μ΄λ€
- μ:
0
,1
,2
,3
,4
, ... 0
μ νμ€μ λ ₯ (ν€λ³΄λ κ°μ μ λ ₯ μ₯μΉ)1
μ νμ€μΆλ ₯ (ν°λ―Έλμ μΆλ ₯)2
λ νμ€μλ¬ (μ€λ₯ λ©μμ§ μΆλ ₯)
νλ‘κ·Έλ¨μ΄ μμν λ μ΄ 3κ°λ μλμΌλ‘ μ΄λ¦° μνλ‘ μμνλ€.
λμ€ν¬λ¦½ν° λ²νΈ | μλ―Έ | POSIX μ΄λ¦ | Cμμμ μ€νΈλ¦Ό |
---|---|---|---|
0 | νμ€ μ λ ₯ | STDIN_FILENO |
stdin |
1 | νμ€ μΆλ ₯ | STDOUT_FILENO |
stdout |
2 | νμ€ μλ¬ | STDERR_FILENO |
stderr |
unistd.h
ν€λμ STDIN_FILENO
, STDOUT_FILENO
, STDERR_FILENO
κ°μ μ΄λ¦μ΄ μ μλμ΄ μλ€.
3. νμΌμ μ΄λ©΄ λ²νΈκ° νλ λ°°μ λλ€
open()
ν¨μ κ°μ κ±Έ νΈμΆνλ©΄ 컀λμ΄ μ μ°κ³ μλ κ°μ₯ μμ λ²νΈλ₯Ό 골λΌμ€λ€.- μ΄ν read, write λ± νμΌμ μ κ·Όν λ μ΄ λ²νΈλ₯Ό κ³μ μ¬μ©νλ€.
μμ
νμ¬ μ΄λ¦° fd λ²νΈ | μλ―Έ |
---|---|
0 |
νμ€μ
λ ₯ (stdin ) |
1 |
νμ€μΆλ ₯ (stdout ) |
2 |
νμ€μλ¬ (stderr ) |
3 |
μ΄λ € μλ νμΌ A |
4 |
μ΄λ € μλ νμΌ B |
μ΄ μνμμ open()
μ νΈμΆνλ©΄, μμ§ μ μ°μΈ κ°μ₯ μμ λ²νΈμΈ 5
κ° λ°νλλ€.
λ§μ½ close(3);
μ νλ©΄ fd
3μ ν΄μ λλ€.
κ·Έ λ€μ open()
μ νΈμΆνλ©΄ 3μ΄ λ€μ ν λΉλ μ μλ€.
4. νμΌ λμ€ν¬λ¦½ν°λ 컀λ λ΄λΆ ν μ΄λΈμ μΈλ±μ€
- 컀λμ κ° νλ‘μΈμ€λ§λ€ ‘μ΄λ¦° νμΌ λͺ©λ‘ ν μ΄λΈ’μ κ΄λ¦¬νλ€.
- λμ€ν¬λ¦½ν°λ μ΄ ν μ΄λΈμ λ²νΈμ΄λ€.
- μ΄ ν μ΄λΈμλ μ€μ νμΌ μ 보, μ½κΈ°/μ°κΈ° μμΉ(offset), μ κ·Ό λͺ¨λ λ±μ΄ κΈ°λ‘λμ΄ μλ€.
OPEN_MAX
OPEN_MAX
λ POSIXμμ μ μν μμλ‘,ν νλ‘μΈμ€κ° λμμ μ΄ μ μλ νμΌ λμ€ν¬λ¦½ν° μμ μ΅μκ° λλ κΈ°μ€κ°μ΄λ€.<limits.h>
μ μ μΈλμ΄ μλ€.
OPEN_MAX
λ μ»΄νμΌ μμ μ ν΄μ§ κ°μ΄κ³ , μ€μ λ°νμμμ κ°λ₯ν μ΅λ fd μ(ulimit -n
)λ λ ν¬κ±°λ λ€λ₯Ό μ μλ€.
ulimit -n
- μ€μ λ‘λ
ulimit -n
μΌλ‘ νμΈλλ κ°μ΄ μ μ©λλ€. - λ§μ μμ€ν
μμλ κΈ°λ³Έκ°μ΄
1024
μ§λ§, μ΄λ μ¬μ©μ/μΈμ /νλ‘μΈμ€ μ€μ μ λ°λΌ λ€λ₯΄λ€. - μ¦,
fd > 1024
쑰건μ μ°κ³ μΆλ€λ©΄, μ μ μΌλ‘OPEN_MAX
λ§ λ―ΏμΌλ©΄ μννλ€.OPEN_MAX
λ "보μ₯λ μ΅μκ°"μ΄κ³ , "μ΅λκ°"μ μλλ€. getrlimit()
λλulimit -n
κ°μ κΈ°λ°ν΄ νλ¨νλ κ² μ ννλ€.
C μ½λμμ μ€μ fd μ΅λκ° νμΈνλ €λ©΄:
#include <sys/resource.h>
struct rlimit rl;
getrlimit(RLIMIT_NOFILE, &rl);
printf("Max open fds: %ld\n", rl.rlim_cur); // νμ¬ μ ν