프로그램상에서 파일에 저장되어 있는 데이터를 참조하길 원한다면 내가 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 데이터가 이동할 수 있는 다리를 놓아야 한다. 이런 데이터 이동의 경로가 되는 다리를
'스트림(stream)'이라고 한다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
FILE* fp = fopen("data.txt", "wt");
if (fp == NULL)
{
puts("파일오픈 실패!");
return -1;
}
fputc('A', fp);
fputc('b', fp);
fputc('c', fp);
fclose(fp);
return 0;
}
프로그램을 실행시켜 A,b,c를 data.txt파일에 입력시켰다. wt로 접근하게 되면 실행할 떄 마다 data.txt 파일을 지우고 다시 생성한다.
fopen으로 파일을 열고 fclose를 파일을 닫아주어야 하는데 그 이유는 첫번째 운영체제가 할당한 자원의 반환,
두번쨰 버퍼링 되었던 데이터의 출력이다.
MODE
모드(mode) | 스트림의 성격 | 파일이 없으면? |
r | 읽기 가능 | 에러 |
w | 쓰기 가능 | 생성 |
a | 파일의 끝에 덧붙여 쓰기 가능 | 생성 |
r+ | 읽기/쓰기 가능 | 에러 |
w+ | 읽기/쓰기 가능 | 생성 |
a+ | 읽기/덧붙여 쓰기 가능 | 생성 |
모드는 파일의 개방모드를 말한다. 프로그램이 실행할 모드를 선택해서 fopen함수의 두번째 인자에 작성하면 된다.
텍스트 파일과 바이너리 파일
텍스트 파일:사람이 인식할 수 있는 문자를 담고 있는 파일
바이너리 파일:컴퓨터가 인식할 수 있는 데이터를 담고 있는 파일
파일 입출력 함수
int fpuc(int c, FILE * stream); // 문자 출력
int fgetc(FILE * stream); // 문자 입력
int fputs(const char * s, FILE * stream); // 문자열 출력
char * fgets(char * s, int n, FILE * stream); // 문자열 입력
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
FILE* fp = fopen("simple.txt", "wt");
if (fp == NULL)
{
puts("파일오픈 실패!");
return -1;
}
fputc('A', fp);
fputc('B', fp);
fputc("My name is Hong \n", fp);
fputc("Your name is Yoon \n", fp);
fclose(fp);
return 0;
}
쓰기모드로 접근하여 simple.txt 파일에 값을 입력했다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main(void)
{
char str[30];
int ch;
FILE* fp = fopen("../23-3/simple.txt", "rt");
if (fp == NULL)
{
puts("파일오픈 실패!");
return -1;
}
ch = fgetc(fp);
printf("%c \n", ch);
ch = fgetc(fp);
printf("%c \n", ch);
fgets(str, sizeof(str), fp);
printf("%s", str);
fgets(str, sizeof(str), fp);
printf("%s", str);
fclose(fp);
return 0;
}
읽기모드로 접근하여 입력한 파일을 열었다.
'PROGRAMMING LANGUAGE > C' 카테고리의 다른 글
24강 메모리 동적할당 (0) | 2021.09.21 |
---|---|
21강, 22강 TYPEDEF, 공용체, 열거형 (0) | 2021.09.20 |
20강 구조체 (0) | 2021.09.16 |
19강 함수 포인터와 void 포인터 (0) | 2021.09.16 |
18강 다중포인터 (0) | 2021.09.16 |