문타쿠, 공부하다.
[독하게 시작하는 C 프로그래밍] 섹션 18. 파일 입/출력 본문
파일 시스템 기본 이론 - 첫 번째
컴퓨터 = CPU + RAM + 보조기억장치(HDD/SSD)
- CPU
- 연산자를 통해 관리/사용한다.
- RAM = 1차 메모리
- 변수를 통해 관리/사용한다.
- 휘발성이고 용량이 작다는 특징이 있다.
- HDD나 SSD와 같은 보조기억장치 = 2차 메모리
- 데이터량이 굉장히 많아 파일 시스템으로 관리한다.
- 비휘발성이고 용량이 크다는 특징이 있다.
파일 시스템
- '파일'이란 기본적으로 하나의 단위라고 할 수 있다.
- 윈도우 파일 시스템(NTFS)에서는 논리 드라이브 단위 및 경로 사용
- 파일 시스템은 덩치가 굉장히 크고 용량도 커서 분할 작업을 함
- 논리적 분할: 물리적으로 한 개인 디스크를 논리적으로 여러 개가 되도록 분할하는 것(=파티셔닝)
- 절대 경로 = 전체 경로 = Full Path = 명확한 위치 정보
- 상대 경로에서 .은 현재, ..은 상위 디렉토리를 의미
- 볼륨 = 디스크
- 디렉토리 = 폴더 = 경로
디지털 포렌식
- 손상된 파일 시스템을 복구하는 것에 중점을 두고 있는 기술 = 디지털 포렌식의 가장 핵심 기술은 '복구'라고 할 수 있다.
파일 시스템 기본 이론 - 두 번째
- 파일(=데이터의 단위)은 프로세스가 접근 주체
- 여러 프로세스가 존재하는 시스템에서 한 파일에 대한 동시 접근 시 데이터가 엉키는 문제가 발생할 수 있음
- 파일 입/출력에 사용되는 내부 버퍼가 있을 수 있음
- 장치는 파일로 추상화(단순화) 됨
- 파일은 장치를 추상화 한 장치 파일과 우리가 일반적으로 알고 있는 데이터 파일이 존재
파일 스트림이란 무엇인가?
스트림이란?
- 1차원 선형구조이고, 빈틈없이 연속적인 것
텍스트와 바이너리 직접 들여다 보기
파일명, 확장명, 바이너리와 텍스트
- 윈도우 시스템에서 파일명은 [파일이름.확장명]으로 구성
- 파일 형식은 바이너리와 텍스트로 나누며 텍스트는 바이너리에 포함되는 것으로 볼 수 있음
- 텍스트 파일은 문자열로 해석할 수 있는 바이너리만 담긴 파일
파일 생성, 개방, 폐쇄
fopen() 접근 모드 문자 -> 보안 문제로 fopen_s() 권장
모드 | 의미 | 존재하는 경우 | 없는 경우 |
r | Text read | 파일 열기 | 에러 |
w | Text write | 기존 내용 지우고 열기 | 새로 만듦 |
a | Text append | 기존 내용 뒤에 추가 | 새로 만듦 |
r+ | Text read and update | 파일 열기 | 에러 |
w+ | Text write and update | 기존 내용 지우고 열기 | 새로 만듦 |
a+ | Text append and update | 기존 내용 뒤에 추가 | 새로 만듦 |
아래 기본 예제에서 모드 및 파일의 존재 유무 바꿔보면서 실행해보기
#include <stdio.h>
int main(void)
{
FILE* fp = NULL;
fopen_s(&fp, "TestFile.txt", "r");
if (fp == NULL)
{
puts("에러! 파일 열기 실패!");
return;
}
fclose(fp);
return 0;
}
텍스트 파일 입/출력
실습 코드 및 자세한 설명은 강의 참고
Buffered I/O와 파일 입출력 버퍼 플러싱
플러싱이란?
ㄴ메모리에 담긴 데이터를 어디론가 흘려내버리는 것
플러싱이라는 것을 왜 하는데?
ㄴ플러싱은 입/출력 시 사용되는 I/O 버퍼가 완전히 종결되도록 해주고, 그다음 버퍼를 클리어해주는 것이 기본적인 역할이기 때문
ㄴ파일 플러싱, fflush() 함수
실습 코드 및 자세한 설명은 강의 참고
콘솔 I/O 버퍼 메모리 추적하기
예제를 통해 파일의 구조체 내부를 뜯어보는(?) 메모리 디버깅에 대한 내용
실습 코드 및 자세한 설명은 강의 참고
바이너리 파일 입/출력
모드 | 의미 | 존재하는 경우 | 없는 경우 |
rb | Binary read | 파일 열기 | 에러 |
wb | Binary write | 기존 내용 지우고 열기 | 새로 만듦 |
ab | Binary append | 기존 내용 뒤에 추가 | 새로 만듦 |
rb+ | Binary read and update | 파일 열기 | 에러 |
wb+ | Binary write and update | 기존 내용 지우고 열기 | 새로 만듦 |
ab+ | Binary append and update | 기존 내용 뒤에 추가 | 새로 만듦 |
실습 코드 및 자세한 설명은 강의 참고
파일 입/출력 포인터 위치 제어
실습 코드 및 자세한 설명은 강의 참고
'C언어 > 독하게 시작하는 C 프로그래밍' 카테고리의 다른 글
[독하게 시작하는 C 프로그래밍] 섹션 20. 전처리기 (0) | 2023.12.02 |
---|---|
[독하게 시작하는 C 프로그래밍] 섹션 19. 변수와 상수 고급 이론 (Part 4. 고급 이론) (0) | 2023.12.01 |
[독하게 시작하는 C 프로그래밍] 섹션 17. 구조체와 공용체 (0) | 2023.11.26 |
[독하게 시작하는 C 프로그래밍] 섹션 16. 함수 응용 (0) | 2023.11.26 |
[독하게 시작하는 C 프로그래밍] 섹션 15. 메모리와 포인터 (0) | 2023.11.19 |