ํ์ผ ๋์คํฌ๋ฆฝํฐ(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); // ํ์ฌ ์ ํ'๐โโ๏ธ Activities > 42 Cursus' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [get_next_line][C] static ํจ์ & ๋ณ์ (0) | 2025.06.04 |
|---|---|
| [get_next_line][C] open ํจ์ (0) | 2025.06.04 |
| [ft_printf][C] printf ํฌ๋งท ์ถ๋ ฅ ์์ (%p, %u, %x, %X) (1) | 2025.06.02 |
| [ft_printf][C] ๊ฐ๋ณ ์ธ์ ํจ์ (0) | 2025.06.02 |
| [Libft][C] ์ฐ๊ฒฐ ๋ฆฌ์คํธ(linked list) ํจ์ ๊ตฌํ (lstadd_front, lstdelone, lstmap) (0) | 2025.06.02 |