๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[ํ์ผ ์ฒ๋ฆฌ์ ํ์ค์ ์ถ๋ ฅ] ํ์ผ ์ ์ถ๋ ฅ fopen & fread & fwrite ๋ณธ๋ฌธ
๐ฉ๐ป IoT (Embedded)/Raspberry Pi
[ํ์ผ ์ฒ๋ฆฌ์ ํ์ค์ ์ถ๋ ฅ] ํ์ผ ์ ์ถ๋ ฅ fopen & fread & fwrite
์ง์ง์ํ์นด 2024. 1. 3. 23:54728x90
๋ฐ์ํ
<์์์ง ๋์ ์ฌ๋ฌผ์ธํฐ๋ท์ ์ํ ๋ฆฌ๋ ์ค ํ๋ก๊ทธ๋๋ฐ 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
๋ฐ์ํ
'๐ฉโ๐ป IoT (Embedded) > Raspberry Pi' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Comments