[get_next_line][C] ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ(File Descriptor)

2025. 6. 2. 22:05ยท๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus

ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ(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
'๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [get_next_line][C] static ํ•จ์ˆ˜ & ๋ณ€์ˆ˜
  • [get_next_line][C] open ํ•จ์ˆ˜
  • [ft_printf][C] printf ํฌ๋งท ์ถœ๋ ฅ ์˜ˆ์‹œ (%p, %u, %x, %X)
  • [ft_printf][C] ๊ฐ€๋ณ€ ์ธ์ž ํ•จ์ˆ˜
0=2.
0=2.
  • 0=2.
    0=2
    0=2.
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (104)
      • ๐Ÿ“‚ Project (2)
        • Paint the City (2)
      • ๐Ÿ’ญ Problem Solving (42)
        • C++ (28)
        • Java (14)
      • ๐Ÿ“ Study (17)
        • React (1)
        • Java (16)
      • ๐Ÿ’ป CS (11)
        • ๋ฉด์ ‘์„ ์œ„ํ•œ CS ์ „๊ณต์ง€์‹ ๋…ธํŠธ (2)
        • ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ (9)
      • ๐Ÿƒ‍โ™€๏ธ Activities (32)
        • Web Front-End Basic Study (6)
        • 42 Cursus (26)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
    • ๊ธ€์“ฐ๊ธฐ
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    java
    CS
    dfs
    swea
    BFS
    ๋ฐฑ์ค€
    ํŠธ๋ฆฌ
    42๊ฒฝ์‚ฐ
    ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค
    .h
    git
    ๋ฐฑํŠธ๋ž˜ํ‚น
    knapsack
    ๋ธŒ๋ฃจํŠธํฌ์Šค
    ๋งต
    ์ •๋ ฌ
    ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜
    VR
    react
    HTML
    CSS
    ๊ตฌํ˜„
    ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ
    ์‹œ๋ฎฌ๋ ˆ์ด์…˜
    github
    C
    makefile
    unity
    dynamic programming
    La Piscine
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
0=2.
[get_next_line][C] ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ(File Descriptor)
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”