Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

문타쿠, 공부하다.

[독하게 시작하는 C 프로그래밍] 섹션 18. 파일 입/출력 본문

C언어/독하게 시작하는 C 프로그래밍

[독하게 시작하는 C 프로그래밍] 섹션 18. 파일 입/출력

개발새발 문타쿠 2023. 11. 30. 23:13

파일 시스템 기본 이론 - 첫 번째

컴퓨터 = 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 기존 내용 뒤에 추가 새로 만듦

 

실습 코드 및 자세한 설명은 강의 참고


파일 입/출력 포인터 위치 제어

실습 코드 및 자세한 설명은 강의 참고