CTRL + F ๋ก ํค์๋ ๊ฒ์
๋ณธ ๊ธ์ ํ์๊ฐ C์ธ์ด๋ฅผ ๊ณต๋ถํ๋ฉด์ ์ฐ๋ ์ผ์ข
์ ์ ์ฅ ๋
ธํธ์
๋๋ค.
ํ์๋ ๋ฐฐ์ฐ๋ ์
์ฅ์ผ๋ก
ํ์ํ์ ๋ถ ๋ค์ ์ ์ ํ ์ฌ์ฉํ๋ฉด ์ข์ ๋ฏ ํ๋ค.
โ fopen
ํ์ผ์ ์ฝ๊ฑฐ๋ ์ฐ๊ธฐ ์ํด์
์คํธ๋ฆผ์ด ํ์ํ๋ค.
๊ทธ๋ฌํ ์คํธ๋ฆผ์ ์ด ์ ์๋ ํจ์
fopen์ด๋ค.
#include <stdio.h>
FILE * fopen(const char * filename, const char *mode)
์ฒซ ๋ฒ์งธ ์ธ์๋ ํ์ผ์ ์ด๋ฆ
๋ ๋ฒ์งธ ์ธ์๋ ์คํธ๋ฆผ์ ์ข ๋ฅ
์ฌ๊ธฐ์ ๋ฐํํ FILE์
int , double์ฒ๋ผ C์ธ์ด ๊ธฐ๋ณธ ์ ๊ณต ๋ฐํํ์ด ์๋
๊ตฌ์กฐ์ฒด ์ด๋ฆ์ด๋ค.
FILE ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ : ํ์ผ์ ๊ฐ๋ฆฌํค๋ ์ฉ๋
-> ์ด ํฌ์ธํฐ๋ฅผ ์ด์ฉํด์ ํ์ผ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ ๋ ฅ
-> FILE ๊ตฌ์กฐ์ฒด์ ๋ด์ฉ๋ฌผ์ ์ ํ์ X
โ fclose
fopen์ด ์์ผ๋ฉด ๋ฐ๋์ธ
fclose๋ ์กด์ฌํ๋ค.
#include <stdio.h>
int fclose(FILE * stream);
์ฌ๊ธฐ์ fclose์ ํ์์ฑ 2๊ฐ์ง๊ฐ ์กด์ฌํ๋ค.
1 . OS์ ํ ๋น๋ ์์์ ๋ฐ๋ฉ
2 . ๋ฒํผ๋ง ๋์๋ ๋ฐ์ดํฐ ์ถ๋ ฅ
โ fflush
fflush ํจ์๋ ์คํธ๋ฆผ์ ์ข ๋ฃ ํ์ง ์๊ณ
๋ฒํผ๋ง ๋น์ฐ๋ ์ฉ๋๋ก ์ฌ์ฉ๋๋ค.
#include <stdio.h>
int fflush(FILE * stream);
๋จ ์ ๋ ฅ๋ฒํผ ๋์์ผ๋ก ์ฌ์ฉ ๋ถ๊ฐ.
-> ์ ๋ ฅ ๋ฒํผ๋ฅผ ๋น์ธ ์ํฉ์ด ์กด์ฌ X
โ ํ์ผ ๊ฐ๋ฐฉ
r : ์ฝ๊ธฐ
w : ์ฐ๊ธฐ
a : ์ถ๊ฐ
r+ : ์ฝ๊ธฐ + ์ฐ๊ธฐ
w+ : ์ฐ๊ธฐ+์ฝ๊ธฐ
a+ : ์ฝ๊ธฐ+์ถ๊ฐ
+ ๋ชจ๋๊ฐ ๊ธฐ๋ฅ์ด ๋ง์์ ์ข๋ค๊ณ ์๊ฐ ํ ์ ์๋ค.
ํ๋ ๊ทธ๋ด ๊ฒฝ์ฐ
์ฐ๊ธฐ - ์ฝ๊ธฐ
์ฝ๊ธฐ - ์ฐ๊ธฐ
์ ํํ ๋ ๋ง๋ค ๋ฒํผ๋ฅผ ๋น์์ผ ํ๋ค.
ํ์ผ ๊ฐ๋ฐฉ์ ์์ด์
ํ ์คํธ ๋ชจ๋ + ๋ฐ์ด๋๋ฆฌ ๋ชจ๋๊ฐ ์๋ค.
ํ ์คํธ ๋ชจ๋ : ๋ชจ๋ ๋ค์ t ๋ฅผ ๋ถ์ฌ ์ค๋ค.
๊ฐํ (\n) ์ ๊ฒฝ์ฐ ์ด ํ ์คํธ ๋ชจ๋๋ก ์ด์ด์ฃผ๋ฉด OS์ ๋ฐ๋ผ ์๋ ํ ๋ณํ์ด ์ด๋ฃจ์ด์ง๋ค.
์๋ฌด๊ฒ๋ ์ ๋ถ์ผ๊ฒฝ์ฐ์๋ ์ด ํ ์คํธ ๋ชจ๋๋ก ์ด๋ฆฐ๋ค.
ex ) rt , wt , rt+ ...
๋ฐ์ด๋๋ฆฌ ๋ชจ๋ : b ๋ฅผ ๋ถ์ธ๋ค.
ex ) rb , wb , rb+...
โ feof
#include <stdio.h>
int feof(FILE *stream);
ํ์ผ ๋์ ๋๋ฌํ๋ฉด 0์ด ์๋ ๊ฐ ์ค
โ fprintf , fscanf #ํ ์คํธ ๋ฐ์ดํฐ #๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ
์ฒซ ๋ฒ์งธ ์ธ์๋ก FILE ๊ตฌ์กฐ์ฒด ํฌ์ธํฐ๊ฐ ์จ๋ค๋ ์ฌ์ค์ ์ฃผ๋ชฉํ์.
๊ทธ ์ธ์๋ printf์ ํฐ ์ฐจ์ด ์๋ค.
fscanf ์ญ์ FILE ๊ตฌ์กฐ์ฒด๊ฐ 1๋ฒ์งธ๋ก ์จ๋ค๋ ์ฌ์ค์ธ์ scanf ์ ์ฌ์ฉ๋ฒ์ ๋น์ทํ๋ค.
์ด๊ฒ๋ค์ ์ข ๋ ๋จ์ํ๊ฒ ๋ง๋ค ์ ์๋ ๊ตฌ์กฐ์ฒด๋ฅผ ๋ง๋ค ์ ์๋ค.
โ fwrite ,fread #๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ #๊ตฌ์กฐ์ฒด์ ๊ฒฐํฉ
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
typedef struct fread
{
char name[30];
int age;
}Person;
int main(void)
{
FILE* fp;
Person num1;
Person num2;
fp = fopen("person_data.txt", "wb");// ๊ตฌ์กฐ์ฒด ๋ฐ์ดํฐ๋ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ,๋ฐ์ด๋๋ฆฌ ๋ชจ๋๋ก ์ด์ด์ผ ํ๋ค.
printf("์ด๋ฆ ๋์ด ์์๋ก ์
๋ ฅ:");
scanf("%s %d", num1.name, &num1.age);
fwrite((void*)&num1, sizeof(num1), 1, fp);
fclose(fp);
fp = fopen("person_data.txt", "rb");
fread((void*)&num2, sizeof(num2), 1, fp);
printf("%s %d", num2.name, num2.age);
fclose(fp);
return 0;
}
๊ตฌ์กฐ์ฒด์ ๊ฒฐํฉ์ ์ด๋ฐ ํํ๋ก ์ฌ์ฉ๋๋ค.
๋๋ถ์ด fwrite์ fread ํจ์์ ๋ํด ์กฐ๊ธ ์ด์ผ๊ธฐ ํ๊ณ ์ ํ๋ค.
fwrite ํจ์
#include <stdio.h>
size_t fwrite(const void* buffer , size_t size , size_t count , FILE * stream);
2๋ฒ์งธ ์ธ์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ
X๊ฐ(3๋ฒ์งธ ์ธ์)๋ฅผ
1๋ฒ์งธ ์ธ์๋ก ๋ถํฐ ์ฝ์ด ๋ค์ฌ์
4๋ฒ์งธ ์ธ์์ ์ ์ฅ
#include <stdio.h>
size_t fread(void* buffer , size_t size , size_t count , FILE * stream);
ํจ์ ํธ์ถ ์ฑ๊ณต ์
count๋ฅผ ๋ฐํ ํ๋ค.
2๋ฒ์งธ ์ธ์ ํฌ๊ธฐ์ ๋ฐ์ดํฐ
X๊ฐ(3๋ฒ์งธ ์ธ์)๋ฅผ
4๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ก ์ฝ์ด ๋ค์ฌ์
buffer์ ์ ์ฅ
size_t ๋ unsigned int์ ๊ฐ๋ค๊ณ ์๊ฐ ํ๋๋ฐ
์ด์์ฒด์ ์ ๋ฐ๋ผ ๊ทธ ํฌ๊ธฐ๊ฐ ๋ค๋ฅผ ์ ์๋ค.
๊ฐ ๋นํธ์ ๋ง๋ ๋ถํธ ์๋ ์ ์๋ค.
โ ํ์ผ ์์น ์ง์์ # fseek
FILE ๊ตฌ์กฐ์ฒด์ ์ผ์์ด๋ค.
fgets ํจ์ ํธ์ถ ๋ฌธ์๋ฅผ 10๊ฐ ์ฝ์ด ๋ค์ด๋ฉด
10๊ฐ๊น์ง ์ฝ์ด ๋ค์๋ค๋๊ฒ
ํ์ผ ์์น ์ง์์์ ์ ์ฅ ๋๋ค.
#include <stdio.h>
int fseek(FILE *stream , long offset , int wherefrom);
์ฑ๊ณตํ๋ฉด 0 , ์๋๋ฉด 0 ์๋ ๊ฑฐ ๋ฐํ
stream ์ผ๋ก ์ ๋ฌ๋ ํ์ผ ์์น ์ง์์๋ฅผ wherefrom ๋ถํฐ ์์ํด offset ๋งํผ ์ด๋
wherefrom์ ์์นํ๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์๊ฐ ํ๋ค.
SEEK_SET(x) : ํ์ผ ๋งจ ์์์ ๋ถํฐ x๋งํผ ์ด๋
SEEK_CUR(x) : ํ์ฌ ์์น์์ x๋งํผ ์ด๋,
SEEK_END(x) : ํ์ผ ๋งจ ๋์์ ๋ถํฐ x๋งํผ ์ด๋
์ฌ๊ธฐ์ ๋์ ๋ฐ์ดํฐ ๋์ด ์๋๋ผ ํ์ผ์ ๋์ ๋ํ๋ด๋ EOF๋ถํฐ ์์์ด๋ค.
์ฌ๊ธฐ์ x๊ฐ ์์๋ฉด ํ์ผ ์์ ์์น๋ก ๊ฐ๋ค๋ ์ ์ธ์ง ํ์.
12345 ๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ฉดSEEK_END(2) ๋ ๋ฐ์ดํฐ 4๋ฅผ ๊ฐ๋ฅดํจ๋ค.1 2 3 4 5 EOF ์ด๋ฏ๋ก EOF์์ 2์นธ ๋จ์ด์ง 4๊ฐ ๋ง๋ค.
โ ํ์ผ ์์น ์ง์์ # ftell
#incldue <stdio.h>
long ftell(FILE * stream);
์ถ๊ฐ์ ์ผ๋ก ํ์ฌ์์น๋ฅผ ๋ํ๋ด๋ ftell ํจ์๋ ์๊ฐํ๋ค.
ํ์ผ ์ฒซ ๋ฒ์งธ๋ 0๋ถํฐ ์นด์ดํ ๋๋ค.