|
| 1 | +--- |
| 2 | +sidebar_position: 11 |
| 3 | +title: 파일 입출력 |
| 4 | +description: 입출력을 위한 다양한 함수와 포맷, 파일 입출력의 개념과 방법을 설명합니다. |
| 5 | +--- |
| 6 | + |
| 7 | +## 1. 표준 입출력 (Standard I/O) |
| 8 | + |
| 9 | +C 프로그래밍에서 입출력은 **스트림(stream)** 개념을 통해 처리됩니다. |
| 10 | + |
| 11 | +- **스트림(Stream)**: 바이트의 흐름. 입력/출력 데이터를 임시로 저장하는 **버퍼** 포함 |
| 12 | +- **표준 스트림 종류** |
| 13 | + - `stdin`: 표준 입력(키보드) |
| 14 | + - `stdout`: 표준 출력(모니터) |
| 15 | + - `stderr`: 표준 에러 출력(모니터) |
| 16 | + |
| 17 | +**예시 코드:** |
| 18 | + |
| 19 | +```c |
| 20 | +#include <stdio.h> |
| 21 | + |
| 22 | +fscanf(stdin, "%d", &num); // 표준 입력 |
| 23 | +fprintf(stdout, "%d", num); // 표준 출력 |
| 24 | +fprintf(stderr, "error!\n"); // 표준 에러 출력 |
| 25 | +``` |
| 26 | +
|
| 27 | +--- |
| 28 | +
|
| 29 | +## 2. 입출력 함수 (I/O Functions) |
| 30 | +
|
| 31 | +표준 입출력 및 파일 입출력에 사용되는 다양한 함수가 있습니다. |
| 32 | +
|
| 33 | +- **문자 입출력** |
| 34 | + - `getchar()`: 한 문자 입력 |
| 35 | + - `putchar()`: 한 문자 출력 |
| 36 | +- **문자열 입출력** |
| 37 | + - `gets_s()`(권장) 또는 `gets()`: 문자열 입력 |
| 38 | + - `puts()`: 문자열 출력 |
| 39 | +- **형식화된 입출력** |
| 40 | + - `scanf()`: 형식 지정자 사용 입력 |
| 41 | + - `%[ijk]`: i, j, k로만 이루어진 문자열 입력 |
| 42 | + - `%[^ijk]`: i, j, k를 제외한 문자열 입력 |
| 43 | + - `printf()`: 형식 지정자 사용 출력 |
| 44 | + - 예: `printf("%+10.2f\n", fn);` (`+`: 플래그, `10`: 필드 폭, `2`: 정밀도, `%f`: 형식) |
| 45 | +
|
| 46 | +> **참고:** scanf는 변수의 주소를 전달해야 하며, 배열은 이름 자체가 포인터입니다. |
| 47 | +
|
| 48 | +--- |
| 49 | +
|
| 50 | +## 3. 파일 입출력 (File I/O) |
| 51 | +
|
| 52 | +프로그램이 영구적으로 데이터를 저장/불러올 수 있도록 하는 기능입니다. |
| 53 | +
|
| 54 | +### 3.1 파일의 종류 |
| 55 | +
|
| 56 | +- **텍스트 파일**: 사람이 읽을 수 있는 아스키 코드로 저장 (예: 소스 파일, 메모장) |
| 57 | +- **2진 파일**: 2진 데이터로 저장, 사람이 읽기 어려움 (예: 실행 파일, 이미지) |
| 58 | +
|
| 59 | +### 3.2 파일 입출력 과정 |
| 60 | +
|
| 61 | +1. **파일 포인터 정의**: `FILE *f;` |
| 62 | +2. **파일 열기**: `f = fopen("1.txt", "w");` |
| 63 | +3. **작업 수행**: 읽기/쓰기 등 |
| 64 | +4. **파일 닫기**: `fclose(f);` |
| 65 | +
|
| 66 | +### 3.3 파일 모드 (File Modes) |
| 67 | +
|
| 68 | +- **텍스트 파일 모드** |
| 69 | + - `"r"`: 읽기 (파일 없으면 에러) |
| 70 | + - `"w"`: 쓰기 (새 파일 생성, 기존 파일 덮어씀) |
| 71 | + - `"a"`: 추가 (파일 끝에 데이터 추가) |
| 72 | + - `"r+", "w+", "a+"`: 읽기/쓰기/추가 모드 |
| 73 | + - `"t"`: 텍스트 파일 모드(생략 가능) |
| 74 | +- **2진 파일 모드** |
| 75 | + - `"rb"`, `"wb"`, `"ab"`, `"rb+"`, `"wb+"` |
| 76 | +
|
| 77 | +### 3.4 파일 입출력 함수 |
| 78 | +
|
| 79 | +- **문자 입출력** |
| 80 | + - `fgetc(f)`: 파일에서 문자 읽기 |
| 81 | + - `fputc(문자, f)`: 파일에 문자 쓰기 |
| 82 | +- **문자열 입출력** |
| 83 | + - `fgets(buffer, size, f)`: 파일에서 문자열 읽기 |
| 84 | + - `fputs(buffer, f)`: 파일에 문자열 쓰기 |
| 85 | +- **형식화된 입출력** |
| 86 | + - `fscanf(f, "%d%f", &i, &fi)`: 파일에서 데이터 읽기 |
| 87 | + - `fprintf(f, "%d%f", i, fi)`: 파일에 데이터 쓰기 |
| 88 | + - `fprintf(stderr, "error in file : %s\n", f)`: 에러 출력 |
| 89 | +- **2진 파일 입출력** |
| 90 | + - `fread(buffer, sizeof(int), 10, f)`: 파일에서 10개 int 읽기 |
| 91 | + - `fwrite(buffer, sizeof(int), 10, f)`: 10개 int 파일에 쓰기 |
| 92 | +
|
| 93 | +### 3.5 버퍼 관리 (Buffer Management) |
| 94 | +
|
| 95 | +- `fflush(fp)`: 버퍼 내용을 즉시 디스크에 저장 (일부 IDE 지원) |
| 96 | +- `setbuf(fp, NULL)`: 버퍼 직접 지정/제거 (일부 IDE 지원) |
| 97 | +
|
| 98 | +--- |
| 99 | +
|
| 100 | +## 결론 |
| 101 | +
|
| 102 | +C 프로그래밍의 파일 입출력은 **스트림** 개념을 기반으로 하며,<br/ > |
| 103 | +표준 입출력(키보드/모니터)과 파일 입출력(디스크)로 나뉩니다. |
| 104 | +
|
| 105 | +각 방식은 문자, 문자열, 형식화 데이터, 2진 데이터 처리를 위한 다양한 함수를 제공합니다. |
| 106 | +파일 입출력 시 파일을 특정 모드로 열고, 작업 후 반드시 닫아야 하며, 이를 통해 외부 데이터와 효과적으로 상호작용할 수 있습니다. |
0 commit comments