카메라 개발자 공부방(SW)

[23장] 파일 입출력 본문

Langauge/C

[23장] 파일 입출력

luckmart 2021. 10. 12. 21:01
반응형

오늘은 파일 입출력에 대해 공부해보겠습니다.

파일 입출력은 메모리에 데이터를 직접 쓰는 방식이 아니라, '스트림'을 활용해서 데이터를 입출력합니다.

여기서 스트림이란

1) 순서가 지켜지는 데이터의 흐름

2) 바이트의 흐름을 의미합니다. 

이 스트림을 이용하면 입출력 장치뿐만 아니라 DataBase, Network와 Application과  간에 '공통된 인터페이스'로 활용할 수 있습니다. 스트림이 없다면 Application과 Network의 입출력 연동된 코드를 만들어 놔도 다른 DataBase 시스템과 연동을 할 때는 새로운 코드를 작성해야 되는 수고가 늘어납니다.

 

스트림을 활용한다면, 이러한 고민을 전혀 할 필요 없습니다~! 

C언어에서 말하는 스트림은 

1) 바이트의 흐름을 나타내는 논리적인 단위

2) 입출력 장치 간의 인터페이스를 의미합니다.

파일 입출력을 사용할 땐 다음의 함수를 사용합니다

fopen(fileName, mode);

fopen의 첫 번째 인자는 읽을 or 생성할 파일의 이름입니다.

fopen의 두 번째 인자는 파일 입출력 동작을 어떻게 할지에 대한 mode입니다.

mode 설명
r(read)
파일을 읽기 전용으로 엽니다.
(파일이 반드시 있어야합니다.)
w(write) 파일을 쓰기 전용으로 엽니다.
파일이 없으면 새로 생성합니다.
a(append) 파일이 있으면 파일의 끝에 내용을 덧붙입니다.
파일이 없으면 새로 생성합니다.
b(binary) 문자열이 아닌 binary 파일을 직접 열 때 사용됩니다.
r+ 파일을 읽고 쓰는 모드입니다
(파일이 반드시 있어야합니다.)
w+ 파일을 읽고 쓰는 모드입니다.
a+ 파일을 읽고 갱신하기 위한 모드입니다.
#include <stdio.h>

int main()
{
    FILE* inf = fopen("hello.txt", "w");
    fputs("hello world\n", inf);
    fclose(inf);
    return 0;
}
// 실행결과
// 작업 디렉터리 경로에 hello.txt가 생기고, hello world가 저장되어있습니다.

fputs 함수의 첫 번째 인자는 저장할 문자열, 두 번 째인자는 파일 포인터를 의미합니다.

#include <stdio.h>

int main()
{
    FILE* inf = fopen("MyAge.txt", "r");
    fprintf(inf, "my age is %d\n", 33);
    fclose(inf);
    return 0;
}

// 실행결과
// 작업 디렉터리 경로에 MyAge.txt가 생기고, 'my age is 33'이 저장되어있습니다.

 

기존의 콘솔 i/O인 printf와 동일하게 사용되는 것을 알 수 있죠? 

스트림을 활용하기 때문에 동일한 인터페이스를 사용할 수 있어서 가능하답니다~

#include <stdio.h>

int main()
{
    FILE* inf = fopen("hello.txt", "w");
    char buf[128] = {};
    fgets(buf, 128, inf);
    printf("%sn", buf);
    fclose(inf);
    return 0;
}
// 실행결과
// hello world

 

fgets 함수의 첫 번째 인자는 저장받을 메모리 주소

두 번 째인자는 최대로 받을 파일크기

세 번 째인자는 파일 포인터입니다.

#include <stdio.h>

int main()
{
    FILE* inf = fopen("MyAge.txt", "r");
    char buf[128] = {};
    fscanf(inf, "my age is %d", buf);
    printf("%sn", buf);
    fclose(inf);
    return 0;
}

// 실행결과
// my age is 33

fscanf 함수의 첫 번째 인자는 파일 포인터

두 번 째인자는 파일을 읽어드릴 문자열 형식,

세 번 째인자는 파일 포인터입니다.

 

fscanf을 통해 파일을 한번 읽을 때마다 문자열 형식만큼 읽어드린다고 생각하시면 됩니다.

 

오늘은 파일 입출력에 대해 공부해봤습니다!

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

[26장] 가변인자  (0) 2021.10.17
[24장] const  (0) 2021.10.13
[22장] 재귀함수  (0) 2021.10.11
[21장] 함수 포인터  (0) 2021.10.10
[20장] void 포인터  (0) 2021.10.09
Comments