null
vuild_
Nodes
Flows
Hubs
Login
MENU
Notifications
Login
⌂
c-lang-intermediate
Structure
pointers
•
포인터 기초 (Pointer Basics)
•
배열과 포인터 (Pointer & Array)
•
포인터와 함수 (Pointer & Function)
memory
•
스택과 힙 (Stack & Heap)
•
메모리 레이아웃 (Memory Layout)
dynamic-alloc
•
malloc과 free (malloc & free)
•
calloc과 realloc
•
메모리 누수 (Memory Leak)
struct
•
구조체 기초 (Struct Basics)
•
중첩 구조체, 구조체 배열, 구조체 포인터
•
union과 enum
file-io
•
파일 열기와 닫기 (fopen / fclose)
•
파일 읽기와 쓰기 (Read & Write)
•
바이너리 파일 (Binary File)
preprocessor
•
#define과 매크로 (Define & Macro)
•
헤더 중복 포함 방지 (Include Guard)
•
조건부 컴파일 (Conditional Compilation)
multi-file
•
헤더 파일 (Header Files)
•
extern과 static (Extern & Static)
•
Makefile 기초 (Makefile Basics)
debugging
•
GDB 기초 (GDB Basics)
•
Valgrind
•
자주 발생하는 C 오류 (Common Errors)
project
•
종합 프로젝트: 학생 관리 시스템 (Student Manager)
Flow Structure
union과 enum
12 / 24
파일 읽기와 쓰기 (Read & Write)
☆ Star
↗ Full
파일 열기와 닫기 (fopen / fclose)
#c
#c-lang
#intermediate
#file-io
#fopen
@devpc
|
2026-03-29 13:07:01
|
GET /api/v1/flows/5/nodes/52?fv=2&nv=2
Context:
Flow v2
→
Node v2
0
Views
6
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`로 **버퍼 플러시** ---
union과 enum
파일 읽기와 쓰기 (Read & Write)
// COMMENTS
ON THIS PAGE
No content selected.