728x90
반응형
1. File Streams and FILE Pointers / 파일 스트림과 FILE 포인터
- 개념: C 언어에서 파일 입출력은 FILE 포인터를 통해 관리됩니다. 파일 스트림은 데이터를 읽고 쓰기 위한 통로로 사용됩니다.
- 주요 표준 스트림:
- stdin: 표준 입력 (키보드)
- stdout: 표준 출력 (콘솔)
- stderr: 표준 에러 출력 (에러 메시지)
2. Opening and Closing Files / 파일 열기 및 닫기
- 파일 열기 (fopen):
- 형식: FILE *fopen(const char *filename, const char *mode);
- 모드:
- "r": 읽기 모드
- "w": 쓰기 모드
- "a": 추가 모드
- "rb", "wb", "ab": 바이너리 모드
- 파일 닫기 (fclose):
- 형식: int fclose(FILE *stream);
- 열린 파일 스트림을 닫아 시스템 리소스를 해제합니다.
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fclose(file);
return 0;
}
3. Reading and Writing Files / 파일 읽기 및 쓰기
- 문자 단위 입출력:
- getc(FILE *stream): 파일에서 한 문자 읽기.
- putc(int char, FILE *stream): 파일에 한 문자 쓰기.
- 라인 단위 입출력:
- fgets(char *str, int n, FILE *stream): 파일에서 한 줄 읽기.
- fputs(const char *str, FILE *stream): 파일에 한 줄 쓰기.
- 블록 단위 입출력:
- fread(void *ptr, size_t size, size_t nmemb, FILE *stream): 데이터를 블록 단위로 읽기.
- fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream): 데이터를 블록 단위로 쓰기.
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
char ch;
while ((ch = getc(file)) != EOF) {
putchar(ch);
}
fclose(file);
return 0;
}
4. Random File Access / 파일의 임의 접근
- 파일 포인터 이동:
- fseek(FILE *stream, long offset, int whence):
- SEEK_SET: 파일의 시작점 기준.
- SEEK_CUR: 현재 위치 기준.
- SEEK_END: 파일의 끝 기준.
- ftell(FILE *stream): 현재 파일 포인터의 위치 반환.
- rewind(FILE *stream): 파일 포인터를 파일의 시작으로 이동.
- fseek(FILE *stream, long offset, int whence):
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(file, 10, SEEK_SET); // 파일 시작으로부터 10바이트 이동
printf("현재 파일 포인터 위치: %ld\\n", ftell(file));
fclose(file);
return 0;
}
5. Error Handling in File I/O / 파일 입출력의 에러 처리
- 에러 확인:
- ferror(FILE *stream): 스트림에서 에러 발생 여부 확인.
- feof(FILE *stream): 파일의 끝 도달 여부 확인.
- 에러 메시지 출력:
- perror(const char *s): 에러 메시지를 출력.
- strerror(int errnum): 에러 번호와 관련된 설명 반환.
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fclose(file);
return 0;
}
6. 파일 입출력 함수 예제
1. fopen
- 설명: 파일을 열어 스트림과 연결합니다.
- 형식: FILE *fopen(const char *filename, const char *mode);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
printf("파일이 성공적으로 열렸습니다!\n");
fclose(file);
return 0;
}
2. fclose
- 설명: 열린 파일 스트림을 닫습니다.
- 형식: int fclose(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
printf("파일을 닫습니다.\n");
fclose(file);
return 0;
}
3. getc
- 설명: 파일에서 한 문자를 읽습니다.
- 형식: int getc(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
char ch;
while ((ch = getc(file)) != EOF) {
putchar(ch); // 파일의 내용을 출력
}
fclose(file);
return 0;
}
4. putc
- 설명: 파일에 한 문자를 씁니다.
- 형식: int putc(int char, FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
putc('A', file); // 파일에 'A'를 씁니다
putc('B', file); // 파일에 'B'를 씁니다
fclose(file);
return 0;
}
5. fgets
- 설명: 파일에서 한 줄을 읽습니다.
- 형식: char *fgets(char *str, int n, FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
char line[100];
while (fgets(line, sizeof(line), file) != NULL) {
printf("%s", line); // 파일의 한 줄씩 출력
}
fclose(file);
return 0;
}
6. fputs
- 설명: 파일에 문자열을 씁니다.
- 형식: int fputs(const char *str, FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("output.txt", "w");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fputs("Hello, World!\n", file);
fputs("This is a test.\n", file);
fclose(file);
return 0;
}
7. fread
- 설명: 파일에서 데이터를 블록 단위로 읽습니다.
- 형식: size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.bin", "rb");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
int buffer[5];
fread(buffer, sizeof(int), 5, file);
for (int i = 0; i < 5; i++) {
printf("%d ", buffer[i]);
}
fclose(file);
return 0;
}
8. fwrite
- 설명: 파일에 데이터를 블록 단위로 씁니다.
- 형식: size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("output.bin", "wb");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
int data[5] = {1, 2, 3, 4, 5};
fwrite(data, sizeof(int), 5, file);
fclose(file);
return 0;
}
9. fseek
- 설명: 파일 포인터를 특정 위치로 이동합니다.
- 형식: int fseek(FILE *stream, long offset, int whence);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(file, 10, SEEK_SET); // 파일의 시작으로부터 10바이트 이동
printf("파일 포인터 이동 완료\n");
fclose(file);
return 0;
}
10. ftell
- 설명: 현재 파일 포인터의 위치를 반환합니다.
- 형식: long ftell(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(file, 10, SEEK_SET);
long position = ftell(file);
printf("현재 파일 포인터 위치: %ld\n", position);
fclose(file);
return 0;
}
11. rewind
- 설명: 파일 포인터를 파일의 시작으로 이동시킵니다.
- 형식: void rewind(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("example.txt", "r");
if (file == NULL) {
perror("파일 열기 실패");
return 1;
}
fseek(file, 10, SEEK_SET); // 파일의 시작으로부터 10바이트 이동
rewind(file); // 다시 파일의 시작으로 이동
printf("파일 포인터가 파일의 시작으로 이동했습니다.\n");
fclose(file);
return 0;
}
12. ferror
- 설명: 파일 스트림에서 에러 발생 여부를 확인합니다.
- 형식: int ferror(FILE *stream);
예제:
#include <stdio.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
if (ferror(file)) {
perror("에러 발생");
}
return 1;
}
fclose(file);
return 0;
}
💡 도움이 되셨다면 댓글과 공감 부탁드립니다! 😊
📌 더 많은 알고리즘 풀이와 프로그래밍 자료는 블로그에서 확인하세요!
✉️ 문의나 피드백은 댓글이나 이메일로 남겨주세요.
728x90
반응형
'Computer Science > C 언어' 카테고리의 다른 글
[C언어 20] Declarations 선언문 (0) | 2024.12.28 |
---|---|
[C언어 19] Advanced Uses of Pointers 포인터의 고급 활용 (1) | 2024.12.27 |
[C 17]Understanding Generic Programming / 제네릭 프로그래밍 이해 (0) | 2024.12.15 |
[C #17] 구조체(Structs), 공용체(Unions), 열거형(Enums) (0) | 2024.12.14 |
[C #16] 문자열 입력 기본 함수와 상황별 선택 (3) | 2024.12.14 |