반응형

파일 입출력

- 프로그램 내의 정보를 외부 파일에 저장하거나 외부 파일의 정보를 프로그램으로 불러오는 방식.

  ※ 스트림 : 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 놓는 다리.

- 필요 헤더 : <stdio.h>

 

fopen 함수

- FILE* fopen(char* filename, char* mode)

- mode 값에 따라 파일 입출력 옵션이 정해진다

  ※ w(덮어쓰기) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 전부 지우고 다시 작성됨.

  ※ a(추가) : 파일이 없을 경우 새로 만듦, 내용이 있을 경우 마지막 내용 뒤 추가.

  ※ r(읽기) : 파일이 없을 경우 NULL을 반환한다.

- 성공 시 해당 FILE 구조체 변수의 주소 값, 실패시 NULL 반환

  ※ 구조체의 주소 값을 반환하기 때문에 FILE 포인터로 변수를 선언함.

  ※ 해당 함수를 호출하면 FILE 구조체 생성 후, 구조체 변수에 파일에 대한 정보가 담긴다.

 

fclose 함수

- int fclose(FILE* stream)

- fopen으로 인해 형성된 스트림을 해제하는 함수

  ※ 운영 체제가 할당한 자원(주로 메모리)을 반환한다.

  ※ 스트림 중간에 존재하는, 버퍼링 되어있던 데이터의 출력.

- 성공 시 0, 실패 시 EOF를 반환

  ※ EOF : end of file, -1의 값을 가지고 있는 상수이다.

 

fprintf 함수

- int fprintf(FILE* stream, char* format)

- 파일의 내용 출력

  ※ 출력의 대상이 콘솔이 아닌 파일이다.

 

구구단 예시

#include<stdio.h>

void main()
{
    FILE* file = fopen("GoGoDan.txt", "w");
    for(int i = 1; i <= 9; i++)
        for(int j = 1; j <= 9; j++)
            fprintf(file, "%d x %d = %d\n", i, j, i * j);
    
    fclose(file);
    
    //결과 : 1단 ~ 9단까지 구구단
}

 

fscanf 함수

- int fscanf(FILE* stream, char* format)

  ※ 파일의 끝에 도달하면 EOF를 반환한다.

- 띄어쓰기 또는 엔터 단위로 정보를 가져온다.

- 파일의 내용 입력

  ※ 입력의 대상이 콘솔이 아닌 파일이다.

 

fgets 함수

- char* fgets(char* buffer, int count, FILE* stream)

- 엔터 단위로 정보를 가져온다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

typedef struct temp
{
    char arr[10];
    int a;
}Temp;

void main()
{
    Temp tmp = { "A", 10 };
    FILE* file = fopen("Tmp.txt", "w");
    char buf[256];
    fprintf(file, "%s\n", tmp.arr);
    fprintf(file, "%d", tmp.a);
    fclose(file);
    
    file = fopen("Tmp.txt", "r");
    if (file == NULL)
    {
        printf("해당 파일이 존재하지 않습니다.\n");
    }
    else
    {
        while (!feof(file))
        {
            fgets(buf, sizeof(buf), file);
            printf("%s", buf);
        }
        
        fclose(file);
    }
    
    // 결과 : A
    //        10
}

 

fread 함수

- char* fread(char* buffer, size_t size, size_t count, FILE* stream)

  ※ count는 바이트 수이다. 보통 1로 둔다.

- 성공지 전달인자 count, 실패 또는 파일의 끝 도달 시 count보다 작은 값 반환

- fgets 함수와는 달리 비어있는 부분은 NULL로 채워주지 않는다.

  ※ 그렇기 때문에 buffer 배열을 선언시에 초기화 후 사용한다.

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

typedef struct temp
{
    char arr[10];
    int a;
}Temp;

void main()
{
    Temp tmp = { "A", 10 };
    FILE* file = fopen("Tmp.txt", "w");
    char buf[256] = {0};
    fprintf(file, "%s %d\n", tmp.arr, tmp.a);
    fclose(file);
    
    file = fopen("Tmp.txt", "r");
    if (file == NULL)
    {
        printf("해당 파일이 존재하지 않습니다.\n");
    }
    else
    {
        fread(buf, sizeof(buf), 1, file);
        printf("%s", buf);
        
        fclose(file);
    }
    
    // 결과 : A 10
}

  ※ buffer 선언부를 보면 초기화 한것을 확인할 수 있다.

반응형

'Stack > C' 카테고리의 다른 글

C 중간 활용 : 학생 관리 시스템 만들기  (0) 2021.08.24
C 구조체, 구조체 포인터  (0) 2021.08.22
C 동적할당  (0) 2021.08.22
C 포인터, 배열  (0) 2021.08.22

+ Recent posts