[C언어] 15.파일 스트림
C언어 학습 노트 : 15. 파일 스트림#
1. 스트림(Stream)의 개념#
- 스트림은 1차원 선형 구조로, 데이터가 빈틈 없이 연속적으로 흐르는 개념이다.
- 키보드, 파일, 네트워크 소켓 등 입출력 장치는 모두 스트림이라는 공통 인터페이스로 다룰 수 있다.
- 따라서 비트 스트림이냐 파일 스트림이냐의 차이는 단순히 데이터의 성격 차이일 뿐, 개념적으로는 동일하다.
2. 파일 스트림의 특징#
C 표준 라이브러리에서 파일 입출력은 스트림(stream) 을 통해 이루어진다.
stdio.h에 정의된FILE구조체 포인터(FILE*)로 표현한다.파일을 다루는 기본 함수:
fopen(): 스트림 열기fclose(): 스트림 닫기fread() / fwrite(): 이진 데이터 입출력fprintf() / fscanf(): 형식화된 텍스트 입출력fgets() / fputs(): 문자열 입출력
3. 스트림의 버퍼링#
대부분의 파일 스트림은 내부에 버퍼(buffer) 를 두어 성능을 최적화한다.
버퍼링 방식:
- 전행 버퍼(full buffering) : 버퍼가 꽉 찼을 때 I/O 발생. (대부분의 파일)
- 행 버퍼(line buffering) : 개행 문자(
\n)가 나오면 I/O 발생. (콘솔 출력) - 무버퍼(no buffering) : 즉시 I/O 발생. (stderr)
4. 파일 스트림 모드#
fopen()모드 예시:"r": 읽기 전용"w": 쓰기 전용 (기존 내용 삭제)"a": 추가 모드 (기존 내용 뒤에 이어쓰기)"rb","wb","ab": 바이너리 모드"r+","w+","a+": 읽기/쓰기 혼합 모드
5. 핵심 포인트#
- 스트림은 데이터의 연속된 흐름을 추상화한 개념이다.
- 파일 입출력은
FILE*스트림을 통해 이루어진다. - 스트림은 버퍼링을 사용하여 I/O 성능을 최적화한다.
- 파일 모드를 적절히 선택하여 텍스트/바이너리, 읽기/쓰기 동작을 제어한다.
6. 실제 적용 예시#
- 로그 기록:
fopen("log.txt", "a"); fprintf(fp, "..."); fclose(fp); - 바이너리 데이터 저장:
fwrite(buffer, 1, size, fp); - 대규모 파일 처리: 버퍼 크기 조정(
setvbuf())으로 성능 개선 가능.