C 언어의 <stdio.h> 라이브러리는 표준 입출력 기능을 제공하는 함수들을 포함하고 있습니다. 이 라이브러리를 사용하면 콘솔과 파일 간의 데이터 입출력을 손쉽게 처리할 수 있습니다.
다른 입출력 라이브러리보기
1. fopen() 함수의 정의
fopen() 함수는 프로그램에서 파일을 열고, 해당 파일에 대한 포인터를 반환합니다.
이를 통해 파일에 대한 읽기, 쓰기, 위치 지정 등의 작업을 수행할 수 있습니다.
형식
FILE *fopen(const char *filename, const char *mode);
filename: 열고자 하는 파일의 경로와 이름을 지정하는 문자열입니다.
mode: 파일을 열 때 사용할 모드를 지정하는 문자열입니다. 이 모드는 파일을 어떻게 사용할지를 정의합니다.
2. 주요 기능
파일 열기: 지정된 파일을 열고, 파일에 대한 포인터를 반환합니다.
오류 처리: 파일 열기에 실패할 경우 NULL 포인터를 반환합니다.
파일 모드 지정: 다양한 모드를 통해 파일을 읽거나 쓸 수 있습니다.
3. 파일 모드
3.1. 일반 파일 모드
"r": 읽기 모드. 파일이 존재해야 하며, 파일의 내용을 읽을 수 있습니다.
"w": 쓰기 모드. 파일이 존재하면 내용을 삭제하고 새로 작성합니다. 파일이 없으면 새로 생성합니다.
"a": 추가 모드. 파일의 끝에 데이터를 추가합니다. 파일이 없으면 새로 생성합니다.
"r+": 읽기 및 쓰기 모드. 파일이 존재해야 하며, 파일의 내용을 읽고 수정할 수 있습니다.
"w+": 읽기 및 쓰기 모드. 파일이 존재하면 내용을 삭제하고 새로 작성합니다. 파일이 없으면 새로 생성합니다.
"a+": 읽기 및 추가 모드. 파일의 끝에 데이터를 추가할 수 있으며, 파일을 읽을 수 있습니다. 파일이 없으면 새로 생성합니다.
3.2. 이진 파일 모드
"rb": 이진 파일을 읽기 위한 모드. 파일이 존재해야 하며, 내용을 읽을 수 있습니다.
"wb": 이진 파일을 쓰기 위한 모드. 파일이 존재하면 내용을 삭제하고 새로 작성합니다. 파일이 없으면 새로 생성합니다.
"ab": 이진 파일에 데이터를 추가하기 위한 모드. 파일의 끝에 데이터를 추가합니다. 파일이 없으면 새로 생성합니다.
"rb+": 이진 파일을 읽기 및 쓰기 위한 모드. 파일이 존재해야 하며, 내용을 읽고 수정할 수 있습니다.
"wb+": 이진 파일을 읽기 및 쓰기 위한 모드. 파일이 존재하면 내용을 삭제하고 새로 작성합니다. 파일이 없으면 새로 생성합니다.
"ab+": 이진 파일을 읽기 및 추가하기 위한 모드. 파일의 끝에 데이터를 추가할 수 있으며, 파일을 읽을 수 있습니다. 파일이 없으면 새로 생성합니다.
이진파일 :데이터가 이진 형식으로 저장된 파일을 의미합니다. 파일의 내용이 0과 1로 이루어진 형식입니다.
4. 사용 예제
4.1 파일 읽기
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r"); // example.txt 파일을 읽기 모드로 열기
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
// 파일 작업 수행
fclose(file); // 파일 닫기
return 0;
}
fopen() 함수는 "example.txt" 파일을 읽기 모드로 열고, 파일 포인터를 반환합니다.
만약 파일이 열리지 않으면 오류 메시지를 출력합니다.
4.2 파일쓰기
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w"); // output.txt 파일을 쓰기 모드로 열기
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(file, "Hello, World!\n"); // 파일에 문자열 쓰기
fclose(file); // 파일 닫기
return 0;
}
output.txt 파일을 쓰기 모드로 열고, "Hello, World!\n" 문자열을 파일에 기록합니다.
4.3 파일 추가
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "a"); // output.txt 파일을 추가 모드로 열기
if (file == NULL) {
printf("Error opening file!\n");
return 1;
}
fprintf(file, "Appending some text...\n"); // 파일 끝에 문자열 추가
fclose(file); // 파일 닫기
return 0;
}
output.txt 파일을 추가 모드로 열고, 기존 내용 뒤에 "Appending some text...\n" 문자열을 추가합니다.
5. 오류 처리
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r"); // 존재하지 않는 파일 열기
if (file == NULL) {
perror("Error opening file"); // 오류 메시지 출력
return 1;
}
fclose(file);
return 0;
}
perror() 함수를 사용하여 오류 메시지를 출력합니다. perror()는 지정된 문자열과 함께 errno 변수를 참조하여 오류에 대한 설명을 출력합니다.
참고 : errno는 C 언어에서 오류 발생 시 오류 번호를 저장하는 전역 변수입니다. 특정한 오류가 발생하면, 해당 오류에 대한 정보를 errno에 설정합니다. 위의 코드에서는 fopen 함수가 파일을 열지 못했을 때 file 포인터가 NULL이 됩니다. 이 경우, perror 함수를 사용하여 오류 메시지를 출력하는데, perror는 내부적으로 errno를 참조하여 적절한 오류 메시지를 생성합니다. 따라서, 코드에서 직접적으로 errno 변수를 사용하지는 않지만, perror 함수가 호출될 때 errno의 값을 기반으로 오류 메시지를 출력합니다.
6. 성능 고려사항
파일 시스템 성능: 파일이 저장된 디스크의 성능이 fopen()의 속도에 영향을 미칠 수 있습니다. SSD는 HDD보다 파일 열기 속도가 빠릅니다.
파일 경로: 상대 경로보다 절대 경로를 사용하는 것이 성능에 영향을 줄 수 있습니다. 절대 경로를 사용하면 파일을 찾는 과정이 단순해지기 때문입니다.
'c언어 > C언어 개념정리' 카테고리의 다른 글
C언어의 표준 입출력 라이브러리 <studio.h> 4. fclose() (0) | 2024.12.03 |
---|---|
C언어의 표준 입출력 라이브러리 <studio.h> 2. scanf() (4) | 2024.12.02 |
C언어의 표준 입출력 라이브러리 <studio.h> 1. printf() (1) | 2024.12.02 |
C 언어에서 프로시저란? (0) | 2024.12.02 |
C언어에서의 라이브러리란? (0) | 2024.12.02 |