[get_next_line][C] read & write ํ•จ์ˆ˜

2025. 6. 4. 01:55ยท๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus

read()์™€ write() ํ•จ์ˆ˜๋Š” unistd.h ํ—ค๋” ํŒŒ์ผ์— ์ •์˜๋˜์–ด ์žˆ๋‹ค.

ํ‘œ์ค€์ž…๋ ฅ(0), ํ‘œ์ค€์ถœ๋ ฅ(1), ํ‘œ์ค€์—๋Ÿฌ(2)์™€ ๊ฐ™์€ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค์–‘ํ•œ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

read() ํ•จ์ˆ˜

read() ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” C ์–ธ์–ด์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ•จ์ˆ˜์ด๋‹ค.

ssize_t read(int fd, void *buf, size_t count);
  • fd: ์ฝ์„ ๋Œ€์ƒ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
  • buf: ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋ฒ„ํผ
  • count: ์ฝ์„ ๋ฐ”์ดํŠธ ์ˆ˜

์„ฑ๊ณตํ•˜๋ฉด ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

write() ํ•จ์ˆ˜

write() ํ•จ์ˆ˜๋Š” ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์“ฐ๋Š” C ์–ธ์–ด์˜ ์‹œ์Šคํ…œ ํ˜ธ์ถœ ํ•จ์ˆ˜์ด๋‹ค.

ssize_t write(int fd, const void *buf, size_t count);
  • fd: ์“ธ ๋Œ€์ƒ์˜ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
  • buf: ์“ธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ๋ฒ„ํผ
  • count: ์“ธ ๋ฐ”์ดํŠธ ์ˆ˜

์„ฑ๊ณตํ•˜๋ฉด ์“ด ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ณ , ์‹คํŒจํ•˜๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

 

์‚ฌ์šฉ ์˜ˆ์‹œ

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>

int main(void) {
    int fd;
    char buf[30];

    fd = open("test.txt", O_RDONLY);
    if (fd == -1) {
        perror("open");
        return 1;
    }

    ssize_t bytesRead = read(fd, buf, sizeof(buf) - 1);
    if (bytesRead == -1) {
        perror("read");
        close(fd);
        return 1;
    }

    buf[bytesRead] = '\0'; // ๋ฌธ์ž์—ด ์ข…๋ฃŒ ๋ฌธ์ž ์ถ”๊ฐ€
    write(STDOUT_FILENO, buf, bytesRead);

    close(fd);
    return 0;
}

test.txt ํŒŒ์ผ์„ ์—ด๊ณ , ์ตœ๋Œ€ 29๋ฐ”์ดํŠธ๋ฅผ ์ฝ์–ด์™€์„œ buf์— ์ €์žฅํ•œ ํ›„, ํ‘œ์ค€์ถœ๋ ฅ(STDOUT_FILENO)์„ ํ†ตํ•ด ์ถœ๋ ฅํ•œ๋‹ค.

 

count ์ธ์ž

read() ํ•จ์ˆ˜์—์„œ ๋งˆ์ง€๋ง‰ ์ธ์ž์ธ count๋Š” ํ•œ ๋ฒˆ์— ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์‹ค์ œ๋กœ count ๋ฐ”์ดํŠธ๋ฅผ ๋‹ค ์ฝ์„ ์ˆ˜๋„, ๊ทธ๋ณด๋‹ค ์ ๊ฒŒ ์ฝ์„ ์ˆ˜๋„, ์•„์˜ˆ ๋ชป ์ฝ๊ณ  -1 (์—๋Ÿฌ) ๋ฅผ ๋ฐ˜ํ™˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

 

์˜ˆ์‹œ

char buffer[10];
ssize_t n = read(fd, buffer, 10);
  • ์ตœ๋Œ€ 10๋ฐ”์ดํŠธ๋ฅผ ์ฝ๊ณ , ๊ทธ๊ฑธ buffer์— ์ €์žฅํ•œ๋‹ค.
  • ๋งŒ์•ฝ ์ฝ์€ ๊ฒŒ "hi\n"์˜€๋‹ค๋ฉด n == 3
  • ๋‚˜๋จธ์ง€ 7๋ฐ”์ดํŠธ๋Š” ์•ˆ ์ฑ„์›Œ์ง„๋‹ค. (์•ˆ์ „ํ•˜๊ฒŒ ์“ฐ๋ ค๋ฉด buffer[n] = '\0'; ํ•„์š”)

 

๋œ ์ฝํžˆ๋Š” ๊ฒฝ์šฐ

์ƒํ™ฉ ๊ฒฐ๊ณผ
EOF ๋„๋‹ฌ 0 ๋ฐ”์ดํŠธ ๋ฐ˜ํ™˜
ํŒŒ์ผ์— ๋‚จ์€ ๋ฐ์ดํ„ฐ๊ฐ€ count๋ณด๋‹ค ์ ์Œ ์ผ๋ถ€๋งŒ ์ฝํž˜
์†Œ์ผ“/ํŒŒ์ดํ”„์ฒ˜๋Ÿผ ๋น„๋™๊ธฐ ์ŠคํŠธ๋ฆผ ์ค€๋น„๋œ ๋งŒํผ๋งŒ ์ฝํž˜
์—๋Ÿฌ ๋ฐœ์ƒ -1 ๋ฐ˜ํ™˜

 

์ฆ‰, count๋Š” ์ตœ๋Œ€๋กœ ์‹œ๋„ํ•  ์ฝ๊ธฐ ํฌ๊ธฐ์ผ ๋ฟ, ์‹ค์ œ๋กœ๋Š” ๊ทธ ์ดํ•˜์ผ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ,

ํ•ญ์ƒ ๋ฐ˜ํ™˜๊ฐ’ ssize_t๋ฅผ ํ™•์ธํ•ด์„œ ์‹ค์ œ๋กœ ๋ช‡ ๋ฐ”์ดํŠธ ์ฝ์—ˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.

 

ssize_t๋ฅผ ์“ฐ๋Š” ์ด์œ 

read() ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  • ์–‘์ˆ˜ N: ์‹ค์ œ๋กœ ์ฝ์€ ๋ฐ”์ดํŠธ ์ˆ˜ (1 ~ count)
  • 0: EOF (ํŒŒ์ผ ๋)
  • -1: ์ฝ๊ธฐ ์‹คํŒจ (์—๋Ÿฌ ๋ฐœ์ƒ)

์–‘์ˆ˜์™€ 0์˜ ๊ฒฝ์šฐ int, size_t, ssize_t ๊ฐ€ ์ „๋ถ€ ๊ฐ€๋Šฅํ•˜๋‹ค.

ํ•˜์ง€๋งŒ -1์˜ ๊ฒฝ์šฐ, ์Œ์ˆ˜์ด๋ฏ€๋กœ unsigned์ธ size_t๋กœ๋Š” ํ‘œํ˜„์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ssize_t๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

 

'๐Ÿƒโ€โ™€๏ธ Activities > 42 Cursus' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Born2beroot] ํ”„๋กœ์ ํŠธ ๊ฐœ์š”  (0) 2025.06.22
[C] Memory Leak  (3) 2025.06.04
[get_next_line][C] static ํ•จ์ˆ˜ & ๋ณ€์ˆ˜  (0) 2025.06.04
[get_next_line][C] open ํ•จ์ˆ˜  (0) 2025.06.04
[get_next_line][C] ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ(File Descriptor)  (0) 2025.06.02
'๐Ÿƒ‍โ™€๏ธ Activities/42 Cursus' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [Born2beroot] ํ”„๋กœ์ ํŠธ ๊ฐœ์š”
  • [C] Memory Leak
  • [get_next_line][C] static ํ•จ์ˆ˜ & ๋ณ€์ˆ˜
  • [get_next_line][C] open ํ•จ์ˆ˜
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)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

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

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

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

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

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