본문 바로가기

PROGRAMMING LANGUAGE/C

23강 파일의 입력과 출력

프로그램상에서 파일에 저장되어 있는 데이터를 참조하길 원한다면 내가 구현한 프로그램과 참조할 데이터가 저장되어 있는 파일 사이에 데이터가 이동할 수 있는 다리를 놓아야 한다. 이런 데이터 이동의 경로가 되는 다리를

'스트림(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