๐—ฃ๐—ฟ๐—ผ๐—ท๐—ฒ๐—ฐ๐˜ ๐—”๐—ฉ๐—ฆ

Project AVS Since 2023.01.27

๐Ÿ’ป ์†Œํ”„ํŠธ์›จ์–ด | Software/ํ”„๋กœ๊ทธ๋ž˜๋ฐ | C์–ธ์–ด | C

๋‚ด๊ฐ€ ๋ณด๋ ค๊ณ  ๋งŒ๋“œ๋Š” C์–ธ์–ด ์ •๋ณด ๋ชจ์Œ #ํŒŒ์ผ ์ž…์ถœ๋ ฅ

์•„๋ฒต AVS 2023. 6. 19. 16:10

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๋ถ€ํ„ฐ ์นด์šดํŒ… ๋œ๋‹ค.

 

๋ฐ˜์‘ํ˜•