파일(file)은 레코드(record)들의 집합이자, 데이터를 영구적으로 보관하는 하드 디스크상의 저장 공간입니다. 프로그램이 종료된 후에도 데이터를 유지해야 한다면 파일 입출력은 필수적인 기능입니다.
C 언어에서의 파일 연산
C 프로그래밍 언어에서 파일에 대해 수행할 수 있는 주요 연산은 다음과 같습니다.
- 파일 이름 지정하기
- 파일 열기
- 파일에서 데이터 읽기
- 파일에 데이터 쓰기
- 파일 닫기
파일 열기 문법
먼저 파일 포인터를 선언합니다.
FILE *파일포인터;
예를 들어 다음과 같이 선언할 수 있습니다.
FILE *fptr;
파일 포인터에 실제 파일을 연결(열기)하는 문법은 다음과 같습니다.
파일포인터 = fopen("파일이름", "모드");
예시:
fptr = fopen("sample.txt", "r"); /* 읽기 모드로 열기 */
FILE *fp;
fp = fopen("sample.txt", "w"); /* 쓰기 모드로 열기 */
여기서 "r"은 읽기(read) 모드, "w"는 쓰기(write) 모드를 의미합니다.
putw() 함수란?
putw() 함수는 파일에 정수 하나를 쓰는(저장하는) 데 사용됩니다.
문법
putw(int num, FILE *fp);
예시:
FILE *fp; int num; putw(num, fp);
getw() 함수란?
getw() 함수는 파일에서 정수 하나를 읽어오는 데 사용됩니다.
문법
int getw(FILE *fp);
예시:
FILE *fp; int num; num = getw(fp);
참고: putw()와 getw()는 표준 C 라이브러리에 포함되지 않은 비표준 함수로, 컴파일러에 따라 지원하지 않을 수 있습니다. 이식성이 중요한 코드라면 fwrite()와 fread() 사용을 권장합니다.
파일에 숫자 쓰기 로직
1부터 10까지의 숫자를 파일에 저장하는 논리는 다음과 같습니다.
fp = fopen("num.txt", "w");
for (i = 1; i <= 10; i++) {
putw(i, fp);
}
fclose(fp);
파일에서 숫자 읽기 로직
저장된 숫자를 파일에서 읽어 화면에 출력하는 논리는 다음과 같습니다.
fp = fopen("num.txt", "r");
printf("file content is\n");
for (i = 1; i <= 10; i++) {
num = getw(fp);
printf("%d\n", num);
}
fclose(fp);
전체 예제 프로그램
다음은 1부터 10까지의 숫자를 파일에 저장한 뒤, 다시 읽어 그대로 출력하는 완전한 C 프로그램입니다.
#include <stdio.h>
int main() {
FILE *fp;
int i, num;
/* 파일에 숫자 쓰기 */
fp = fopen("num.txt", "w");
for (i = 1; i <= 10; i++) {
putw(i, fp);
}
fclose(fp);
/* 파일에서 숫자 읽기 */
fp = fopen("num.txt", "r");
printf("file content is\n");
for (i = 1; i <= 10; i++) {
num = getw(fp);
printf("%d\n", num);
}
fclose(fp);
return 0;
}
실행 결과
위 프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
file content is 1 2 3 4 5 6 7 8 9 10
이처럼 putw()와 getw()를 사용하면 별도의 형식 변환 없이 정수 값을 파일에 직접 저장하고 읽어올 수 있습니다. 단, 두 함수가 비표준이라는 점을 항상 염두에 두고 프로젝트의 요구 사항에 맞게 선택하는 것이 좋습니다.