와드의 블로그

19. 파일 입출력 본문

프로그래밍 언어/C

19. 파일 입출력

Ward 2021. 9. 18. 02:39

(1) 표준 입출력 라이브러리

 

* 표준 입출력 라이브러리란?

컴퓨터의 주기억 장치인 램은 컴퓨터의 전원이 켜져 있을 때만 데이터를 유지할 수 있다. 따라서 운영체제는 컴퓨터가 꺼져도 데이터를 유지할 수 있는 보조기억 장치를 사용한다. 보조기억 장치에서 데이터를 읽고 쓰는 것은 운영체제마다 다르기 때문에 C언어는 표준 입출력 라이브러리를 제공한다. 이 라이브러리를 사용하면 보조기억 장치에 파일 단위로 데이터를 저장하거나 읽을 수 있다.

 

(2) 파일 열기와 닫기

 

* 파일 입출력 함수의 도우미 FILE 구조체

표준 입출력 라이브러리는 FILE 구조체로 포인터 변수를 선언하고 파일 입출력 함수를 호출할 때마다 이 변수를 넘겨주도록 만들어져 있다. FILE 구조체는 사용하려는 디스크 상의 파일이 어떤 상태로 사용 중인지에 대한 정보를 담고 있으며, 파일을 좀 더 편하게 사용할 수 있도록 도와준다.

 

* 파일 열기

파일 열기를 할 때는 사용할 파일 이름과 파일을 어떤 형식으로 사용할 것인지를 먼저 결정하고 fopen함수를 사용한다. 파일을 성공적으로 열면 FILE* 형식의 메모리 주소 값을 반환하고 파일이 존재하지 않거나 파일 형식을 잘못 사용해서 파일 열기에 실패하면 NULL값을 반환한다.

 

* 파일 사용 형식 알아보기

파일 사용 형식이란 파일을 어떻게 사용할 것인지 지정하는 형식을 말한다.

  • "r": 파일 내용 읽기 모드
  • "w": 파일 내용 쓰기 모드
  • "a": 파일에 데이터 이어 쓰기 모드

* 파일 닫기

fopen 함수를 사용하여 파일을 열어서 사용하다가 사용이 끝나면 fclose 함수를 사용하여 파일을 닫아야 한다. 만약 파일을 열어 놓고 파일을 닫지 않으면 파일의 내용이 지워지거나 파일을 사용할 수 없는 상태가 될 수 있으니 주의해야 한다.

 

(3) 텍스트 파일에 데이터 읽고 쓰기

 

* 텍스트 파일에 문자열 저장하기

텍스트 파일에 데이터를 쓸 때에는 fprintf 함수를 사용한다. FILE 구조체 변수의 포인터를 인자로 갖는 것을 제외하면 사용방법은 printf와 비슷하다.

#include <stdio.h>

int main()
{
	FILE* f = fopen("text.txt", "w");
	if (f != NULL) {
		fprintf(f, "Hello\n");
		fclose(f);
	}

	return 0;
}

 

* 텍스트 파일에서 문자열 읽기

텍스트 파일에서 문자열을 읽을 때는 fscanf 함수를 사용한다. 역시 scanf와 비슷하다.

#include <stdio.h>

int main()
{
	FILE* f = fopen("text.txt", "r");
	char str[10];
	if (f != NULL) {
		fscanf(f, "%s", str);
		fclose(f);
		printf("%s\n", str);
	}

	return 0;
}

 

* 텍스트 파일에서 한 줄 단위로 문자열 읽기

fscanf 함수는 문자열 사이에 공백이 있기 때문에 한 줄 단위로 입력 받지 못하고 단어 단위로 파일에서 읽어온다. 따라서 텍스트 파일에서 한 줄 단위로 문자열을 처리하고 싶은 경우에 fgets 함수를 사용한다.

#include <stdio.h>

int main()
{
	FILE* f = fopen("text.txt", "r");
	char str[10];
	if (f != NULL) {
		fgets(str, sizeof(str), f);
		fclose(f);
		printf("%s", str);
	}

	return 0;
}

 

 참조자료: C언어 입문

'프로그래밍 언어 > C' 카테고리의 다른 글

20. 함수 포인터  (0) 2021.09.18
18. 구조체  (0) 2021.09.17
17. 다차원 포인터  (0) 2021.09.17
16. 메모리 할당  (0) 2021.09.17
15. 배열과 포인터  (0) 2021.09.17