๐Ÿ˜Ž ๊ณต๋ถ€ํ•˜๋Š” ์ง•์ง•์•ŒํŒŒ์นด๋Š” ์ฒ˜์Œ์ด์ง€?

[ํŒŒ์ผ ์ฒ˜๋ฆฌ์™€ ํ‘œ์ค€์ž…์ถœ๋ ฅ] ํŒŒ์ผ ์ž…์ถœ๋ ฅ fopen & fread & fwrite ๋ณธ๋ฌธ

๐Ÿ‘ฉ‍๐Ÿ’ป IoT (Embedded)/Raspberry Pi

[ํŒŒ์ผ ์ฒ˜๋ฆฌ์™€ ํ‘œ์ค€์ž…์ถœ๋ ฅ] ํŒŒ์ผ ์ž…์ถœ๋ ฅ fopen & fread & fwrite

์ง•์ง•์•ŒํŒŒ์นด 2024. 1. 3. 23:54
728x90
๋ฐ˜์‘ํ˜•

<์„œ์˜์ง„ ๋‹˜์˜ ์‚ฌ๋ฌผ์ธํ„ฐ๋„ท์„ ์œ„ํ•œ ๋ฆฌ๋ˆ…์Šค ํ”„๋กœ๊ทธ๋ž˜๋ฐ with ๋ผ์ฆˆ๋ฒ ๋ฆฌํŒŒ์ด ์„œ์ ์„ ์ฐธ๊ณ ํ•ด์„œ ์ž‘์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค :-)>

 

โญ ํŒŒ์ผ ์ฒ˜๋ฆฌ์™€ ํ‘œ์ค€ ์ž…์ถœ๋ ฅ

// ํ‘œ์ค€ ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•œ๋‹ค
// ์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ์ •ํ•˜๋Š” ํ•จ์ˆ˜์ธ fprint() ํ•จ์ˆ˜์™€ ํ‘œ์ค€ ์—๋Ÿฌ(etreer) ์ด์šฉํ•ด์„œ ์ €์žฅํ•œ๋‹ค
#include <stdio.h>

int main(int argc, char **argv) {
    int n;
    FILE *in, *out;
    char buf[BUFSIZ];

    // ๋ช…๋ นํ˜• ์ธ์ˆ˜๋กœ ๋ณต์‚ฌํ•  ํŒŒ์ผ๋ช…์ด ์—†๋Š” ๊ฒฝ์šฐ์— ์—๋Ÿฌ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ  ์ข…๋ฃŒํ•œ๋‹ค
    if (argc != 3) {
        fprintf(stderr, "Usage: fcopy file1 file2\n");
        return -1;
    }

    // ๋ณต์‚ฌ์˜ ์›๋ณธ์ด ๋˜๋Š” ํŒŒ์ผ์„ ์ฝ๊ธฐ ๋ชจ๋“œ๋กœ ์—ฐ๋‹ค
    // fopen() : ์ง€์ •ํ•œ ๊ฒฝ๋กœ์— ์žˆ๋Š” ํŒŒ์ผ์˜ ์ŠคํŠธ๋ฆผ์„ ์—ด๊ณ  ๋ฒ„ํผ๋ฅผ ํ• ๋‹นํ•œ๋‹ค
    // (const char *path: ํŒŒ์ผ์˜ ๊ฒฝ๋กœ, const char *mode: ์—ด ์ŠคํŠธ๋ฆผ์˜ ํ˜•ํƒœ๋ฅผ ๋ช…์‹œ)
    // ํŒŒ์ผ ์—ด๊ธฐ ์„ฑ๊ณตํ•˜๋ฉด FILE ํฌ์ธํ„ฐ ๋ฐ˜ํ™˜ & ์‹คํŒจํ•˜๋ฉด NULL (errno ์— ์—๋Ÿฌ ์ •๋ณด)
    if ((in = fopen(argv[1], "r")) == NULL) {
        perror(argv[1]);
        return -1;
    }

    // ๋ณต์‚ฌํ•  ๊ฒฐ๊ณผ ํŒŒ์ผ์„ ์“ฐ๊ธฐ ๋ชจ๋“œ (์ƒˆ๋กœ์šด ํŒŒ์ผ ์ƒ์„ฑ | ๊ธฐ์กด์— ํŒŒ์ผ ๋‚ด์šฉ ์ง€์›€)๋กœ ์—ฐ๋‹ค
    if ((out = fopen(argv[2], "w")) == NULL) {
        perror(argv[2]);
        return -1;
    }

    // ์›๋ณธ ํŒŒ์ผ์—์„œ ํŒŒ์ผ ๋‚ด์šฉ์„ ์ฝ์–ด์„œ ๋ณต์‚ฌํ•  ํŒŒ์ผ์— ์“ด๋‹ค
    // fread() : ์ง€์ •๋œ ์ŠคํŠธ๋ฆผ์—์„œ ์›ํ•˜๋Š” ํฌ๊ธฐ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฒ„ํผ ๊ธฐ๋ฐ˜ ์ž…์ถœ๋ ฅ ํ•จ์ˆ˜
    // (void *ptr: ์ž…๋ ฅ์ด๋‚˜ ์ถœ๋ ฅ์„ ์œ„ํ•œ ๋ฒ„ํผ ๊ณต๊ฐ„, size_t size: ์ž…์ถœ๋ ฅ ๋ฐ์ดํ„ฐ ํ•˜๋‚˜์˜ ํฌ๊ธฐ, size_t nmemb: ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ๋ฐ์ดํ„ฐ ์ˆ˜, FILE *fp: FILE ์ŠคํŠธ๋ฆผ)
    while ((n = fread(buf, sizeof(char), BUFSIZ, in)) > 0) {
        fwrite(buf, sizeof(char), n, out);
    }
    // => ์ž…์ถœ๋ ฅ์„ ์œ„ํ•œ ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ fopen() ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด ๊ฐ๊ฐ ์—ฐ๋‹ค
    // ์ฝ์„ ํŒŒ์ผ์€ r์˜ต์…˜ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ๊ธฐ ๋ชจ๋“œ๋กœ ์—ด๊ณ , ์“ธ ํŒŒ์ผ์€ w์˜ต์…˜ ์‚ฌ์šฉํ•˜์—ฌ ์“ฐ๊ธฐ ๋ชจ๋“œ๋กœ ์—ด์—ˆ๋‹ค
    // fread() ๋กœ ์ฒซ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ , fwrite() ๋กœ ๋‘ ๋ฒˆ์งธ ์ŠคํŠธ๋ฆผ์— ์ฝ์€ ๋ฐ์ดํ„ฐ๋ฅผ ์“ด๋‹ค
    // ๋ณต์‚ฌ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด fclose() ์ด์šฉํ•ด์„œ ๋‘ ๊ฐœ์˜ ์ŠคํŠธ๋ฆผ์„ ๋ชจ๋‘ ๋‹ซ๋Š”๋‹ค

    // ์—ด๋ฆฐ ํŒŒ์ผ์„ ๋‹ซ๋Š”๋‹ค
    // fclose() : FILE ํฌ์ธํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ŠคํŠธ๋ฆผ๊ณผ ํŒŒ์ผ์„ ๋ถ„๋ฆฌํ•œ ํ›„, ํŒŒ์ผ์„ ๋‹ซ๊ณ  ์ž์›์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค
    // ์ถœ๋ ฅ ๋ฒ„ํผ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ŠคํŠธ๋ฆผ์— ์ถœ๋ ฅ(์ €์žฅ)ํ•˜๊ณ  ์ž…๋ ฅ ๋ฒ„ํผ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ„๋ฆฐ ํ›„์— ๋ฒ„ํผ๋ฅผ ํ•ด์ œํ•œ๋‹ค
    // (FILE *fp: FILE ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉ)
    // ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์— ์„ฑ๊ณตํ•˜๋ฉด 0 ๋ฐ˜ํ™˜ & ์‹คํ•ดํŒŒ๋ฉด EOF(01) ๋ฐ˜ํ™˜
    fclose(out);
    fclose(in);

    return 0;
}

/*
gani@gani:~/raspi/File $ gcc -o copy fcopy.c
gani@gani:~/raspi/File $ ./copy fcopy.c fcopy1.c
gani@gani:~/raspi/File $ ls -al copy*.c
-rw-r--r-- 1 gani gani 3181  1์›”  2์ผ  20:25 copy.c
-rw------- 1 gani gani 2774  1์›”  2์ผ  20:23 copy1.c
*/
gcc -o copy fcopy.c
./copy fcopy.c fcopy1.c
ls -al copy*.c

728x90
๋ฐ˜์‘ํ˜•
Comments