null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
☆ Star
파일 열기와 닫기 (fopen / fclose)
#c
#c-lang
#intermediate
#file-io
#fopen
@devpc
|
2026-03-29 12:57:39
|
GET /api/v1/nodes/52?nv=2
History:
v2 (2026-03-29) (Latest)
v1 (2026-03-29)
0
Views
5
Calls
# 파일 열기와 닫기 (fopen / fclose) ## 파일 I/O 기초 C에서 파일은 `FILE` 포인터를 통해 접근합니다. `<stdio.h>`에 선언되어 있습니다. ```c #include <stdio.h> ``` --- ## fopen — 파일 열기 ```c FILE *fopen(const char *filename, const char *mode); ``` - 성공 시: `FILE *` (파일 포인터) 반환 - 실패 시: `NULL` 반환 ### 모드(mode) 옵션 | 모드 | 의미 | 파일 없을 때 | 기존 내용 | |------|------|------------|----------| | `"r"` | 읽기 전용 | 실패 (NULL) | 유지 | | `"w"` | 쓰기 전용 | 새로 생성 | 삭제 (덮어씀) | | `"a"` | 추가 쓰기 | 새로 생성 | 유지 (끝에 추가) | | `"r+"` | 읽기+쓰기 | 실패 (NULL) | 유지 | | `"w+"` | 읽기+쓰기 | 새로 생성 | 삭제 | | `"a+"` | 읽기+추가 | 새로 생성 | 유지 | | `"rb"` | 바이너리 읽기 | 실패 | — | | `"wb"` | 바이너리 쓰기 | 새로 생성 | 삭제 | ### 기본 사용법 ```c FILE *fp = fopen("data.txt", "r"); if (fp == NULL) { perror("fopen"); // 오류 메시지 출력 return 1; } // ... 파일 사용 ... fclose(fp); ``` --- ## fclose — 파일 닫기 ```c int fclose(FILE *stream); ``` - 파일 버퍼를 디스크에 **플러시(flush)** 하고 파일을 닫습니다. - 성공 시 `0`, 실패 시 `EOF` 반환 - 열린 파일은 **반드시 닫아야** 합니다 (리소스 누수 방지) ```c FILE *fp = fopen("output.txt", "w"); if (!fp) { perror("fopen"); return 1; } fprintf(fp, "Hello, File!\n"); if (fclose(fp) != 0) { perror("fclose"); return 1; } ``` --- ## 표준 스트림 C는 프로그램 시작 시 자동으로 세 가지 파일 포인터를 엽니다. | 포인터 | 대상 | 기본 연결 | |--------|------|----------| | `stdin` | 표준 입력 | 키보드 | | `stdout` | 표준 출력 | 화면 | | `stderr` | 표준 오류 | 화면 | ```c fprintf(stdout, "일반 메시지\n"); fprintf(stderr, "오류 메시지\n"); // 리디렉션해도 항상 화면 출력 ``` --- ## 파일 존재 여부 확인 ```c FILE *fp = fopen("test.txt", "r"); if (fp == NULL) { printf("파일이 없거나 읽을 수 없습니다.\n"); } else { printf("파일을 성공적으로 열었습니다.\n"); fclose(fp); } ``` --- ## 전체 예제 ```c #include <stdio.h> int main(void) { // 파일에 쓰기 FILE *fp = fopen("hello.txt", "w"); if (!fp) { perror("fopen (write)"); return 1; } fprintf(fp, "Hello, World!\n"); fprintf(fp, "C 파일 I/O 예제\n"); fclose(fp); // 파일에서 읽기 fp = fopen("hello.txt", "r"); if (!fp) { perror("fopen (read)"); return 1; } char line[256]; while (fgets(line, sizeof(line), fp)) { printf("%s", line); } fclose(fp); return 0; } ``` --- ## 정리 | 함수 | 역할 | |------|------| | `fopen(path, mode)` | 파일 열기, FILE* 반환 | | `fclose(fp)` | 파일 닫기, 버퍼 플러시 | | `NULL` 체크 | fopen 실패 여부 확인 (필수) | **핵심 습관:** 1. `fopen` 직후 **NULL 체크** 2. 사용 완료 후 **반드시 fclose** 3. 쓰기 후에는 `fclose` 또는 `fflush`로 **버퍼 플러시** ---
// COMMENTS
ON THIS PAGE