윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 24. 파일 입출력.

Slides:



Advertisements
Similar presentations
프로그램이란 프로그램 생성 과정 프로젝트 생성 프로그램 실행 컴퓨터를 사용하는 이유는 무엇인가 ? – 주어진 문제를 쉽고, 빠르게 해결하기 위해서 사용한다. 컴퓨터를 사용한다는 것은 ? – 컴퓨터에 설치 혹은 저장된 프로그램을 사용하는 것이다. 문제를 해결하기 위한.
Advertisements

6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
1 08 배열. 한국대학교 객체지향연구소 2 C 로 배우는 프로그래밍 기초 2 nd Edition 배열  동일한 자료유형의 여러 변수를 일괄 선언  연속적인 항목들이 동일한 크기로 메모리에 저장되는 구조  동일한 자료 유형이 여러 개 필요한 경우에 이용할 수 있는.
Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
네트워크 프로그래밍 및 실습.
쉽게 풀어쓴 C언어 Express 제11장 포인터 C Express Slide 1 (of 27)
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
제14장 동적 메모리.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 07. 반복실행을 명령하는 반복문.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
컴퓨터 프로그래밍 기초 [Final] 기말고사
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
조 병 규 Software Quality Lab. 한국교통대학교
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
제 14장 Multicast & Broadcast
Chapter 25. 메모리 관리와 메모리의 동적 할당
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 7장 소켓 연결의 우아한 종료 인공지능실험실 석사 2학기 이희재
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Chapter 06. printf 함수와 scanf 함수 정리하기
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
6장. printf와 scanf 함수에 대한 고찰
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 03. 변수와 연산자.
TCP/IP Socket Programming…
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
박성진 컴퓨터 프로그래밍 기초 [09] 배열 part 1 박성진
13. 포인터와 배열! 함께 이해하기 IT응용시스템공학과 김 형 진 교수.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 21. 문자와 문자열 관련 함수.
27장. 모듈화 프로그래밍.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
유승석 FILE I/O File Input/Output 유승석 SD50 – C# & .NET Platform.
24장. 파일 입출력.
쉽게 풀어쓴 C언어 Express 제14장 포인터 활용 C Express Slide 1 (of 22)
19. 함수 포인터와 void 포인터.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
2장. 변수와 타입.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
8주차: Strings, Arrays and Pointers
5강. 배열 배열이란? 배열의 문법 변수와 같이 이해하는 배열의 메모리 구조의 이해 레퍼런스의 이해 다차원 배열
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
컴퓨터 프로그래밍 기초 [01] Visual Studio 설치 및 사용방법
Chapter 13. 템플릿(Template) 1
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
Linux 9.X 기초에서 활용까지 Chapter 06 VI 편집기.
3장 JSP프로그래밍의 개요 이장에서 배울 내용 : JSP페이지의 기본적인 개요설명과 JSP페이지의 처리과정 그리고 웹 어플리케이션의 구조에 대해서 학습한다.
Chapter 10 데이터 검색1.
Chapter 27. 파일의 분할과 헤더파일의 디자인
함수, 모듈.
TVM ver 최종보고서
구조체(struct)와 공용체(union)
Summary of Pointers and Arrays
Numerical Analysis Programming using NRs
Chapter 12 파일 입출력.
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 23. 구조체와 사용자 정의 자료형2.
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 04. 클래스의 완성.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 05. 복사 생성자.
윤성우의 열혈 C++ 프로그래밍 윤성우 저 열혈강의 C++ 프로그래밍 개정판 Chapter 07. 상속의 이해.
김선균 컴퓨터 프로그래밍 기초 - 12th : 문자열 - 김선균
13. 포인터와 배열! 함께 이해하기.
Report #2 (기한: 3/16) 데이터 구조 과목의 수강생이 50명이라고 가정한다. 이 학생(학번은 2016????으로 표현됨)들의 중간 시험(0~100), 기말 시험(0~100) 성적을 성적 파일에 작성하라(프로그램을 통해서 또는 수작업으로). 성적 파일을 읽어들여서.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 24. 파일 입출력

Chapter 24-1. 파일과 스트림 그리고 기본적인 파일의 입출력 윤성우의 열혈 C 프로그래밍 Chapter 24-1. 파일과 스트림 그리고 기본적인 파일의 입출력 윤성우 저 열혈강의 C 프로그래밍 개정판

파일에 저장되어 있는 데이터를 읽고 싶어요. 윤성우의 열혈 C 프로그래밍 콘솔 입출력과 마찬가지로 파일로부터의 데이터 입출력을 위해서는 스트림이 형성되어야 한다. 파일과의 스트림 형성은 데이터 입출력의 기본이다.

fopen 함수를 통한 스트림의 형성과 FILE 구조체 윤성우의 열혈 C 프로그래밍 fopen 함수를 통한 스트림의 형성과 FILE 구조체 fopen 함수호출 시 생성되는 FILE 구조체 변수와 이를 참조하는 FILE 구조체 포인터 변수의 관계를 이해하자!

fopen 함수호출의 결과 윤성우의 열혈 C 프로그래밍 fopen 함수가 파일과의 스트림 형성을 요청하는 기능의 함수이다. 스트림을 형성할 파일의 이름 형성할 스트림의 종류 • fopen 함수가 호출되면 FILE 구조체 변수가 생성된다. • 생성된 FILE 구조체 변수에는 파일에 대한 정보가 담긴다. • FILE 구조체의 포인터는 사실상 파일을 가리키는 ‘지시자’의 역할을 한다. fopen 함수가 파일과의 스트림 형성을 요청하는 기능의 함수이다.

출력 스트림의 생성 윤성우의 열혈 C 프로그래밍 "wt" 에는 출력 스트림의 의미가 담겨있다. 출력 스트림의 형성 결과 포인터 변수 fp에 저장된 값이 data.txt의 스트림에 데이터를 전송하는 도구가 된다.

입력 스트림의 생성 윤성우의 열혈 C 프로그래밍 "rt" 에는 입력 스트림의 의미가 담겨있다. 입력 스트림의 형성 결과 포인터 변수 fp에 저장된 값이 data.txt의 스트림으로부터 데이터를 수신하는 도구가 된다.

FILE * fp = fopen("C:\\Project\\data.txt", "wt"); 윤성우의 열혈 C 프로그래밍 파일에 데이터를 써봅시다. 현재 디렉터리에 저장된 파일 data.txt를 찾는다. 현재 디렉터리는 실행파일이 저장된 디렉터리이거나 프로젝트 파일이 저장된 디렉터리이다! 문자 A를 fp가 가리키는 파일에 저장해라! FILE * fp = fopen("C:\\Project\\data.txt", "wt"); fopen 함수호출 시 경로를 완전히 명시할 수도 있다. 메모장으로 파일을 열어서 확인해 본다.

스트림의 소멸을 요청하는 fclose 함수 윤성우의 열혈 C 프로그래밍 fclose 함수호출이 동반하는 두 가지 • 운영체제가 할당한 자원의 반환 • 버퍼링 되었던 데이터의 출력 fclost 함수가 호출되어야 스트림 형성 시 할당된 모든 리소스가 소멸이 된다. 따라서 파일이 오픈 된 상태로 놔두는 것은 좋지 않다.

Ch21에서 호출한 적 있는 fflush 함수 윤성우의 열혈 C 프로그래밍 콘솔 대상으로 fflush 함수를 설명한바 있다. 대상이 파일로 바뀌었을 뿐 달라지는 것은 없다. • 출력버퍼를 비운다는 것은 출력버퍼에 저장된 데이터를 목적지로 전송한다는 의미 • 입력버퍼를 비운다는 것은 입력버퍼에 저장된 데이터를 소멸시킨다는 의미 • fflush 함수는 출력버퍼를 비우는 함수이다. • fflush 함수는 입력버퍼를 대상으로 호출할 수 없다. 이렇듯 fflush 함수의 호출을 통하여 fclose 함수를 호출하지 않고도 출력버퍼만 비울 수 있다. 그렇다면 파일의 입력버퍼는 어떻게 비우는가? 이를 위한 별도의 함수가 정의되어 있는가?

파일로부터 데이터를 읽어 봅시다. 윤성우의 열혈 C 프로그래밍 fp로부터 하나의 문자를 읽어서 변수 ch에 저장해라! 이전에 문자가 써진 순서대로 읽힌다! 실행결과

윤성우의 열혈 C 프로그래밍 Chapter 24-2. 파일의 개방 모드 윤성우 저 열혈강의 C 프로그래밍 개정판

스트림의 구분 기준 두 가지(Basic) 윤성우의 열혈 C 프로그래밍 • 기준1 읽기 위한 스트림이냐? 쓰기 위한 스트림이냐? 파일에 데이터를 쓰는데 사용하는 스트림과 데이터를 읽는데 사용하는 스트림은 구분이 된다. • 기준2 텍스트 데이터를 위한 스트림이냐? 바이너리 데이터를 위한 스트림이냐? 출력의 대상이 되는 데이터의 종류에 따라서 스트림은 두 가지로 나뉜다.. 텍스트 데이터 바이너리 데이터 텍스트 데이터 읽기 스트림 바이너리 데이터 읽기 스트림 읽기 스트림 쓰기 스트림 텍스트 데이터 바이너리 데이터 텍스트 데이터 쓰기 스트림 바이너리 데이터 쓰기 스트림 기본적인 스트림의 구분! 그러나 실제로는 더 세분화!

스트림을 구분하는 기준1: Read or Write 윤성우의 열혈 C 프로그래밍 스트림을 구분하는 기준1: Read or Write √ 스트림의 성격은 R/W를 기준으로 다음과 같이 세분화 된다. 모드의 +는 읽기, 쓰기가 모두 가능한 스트림의 형성을 의미한다. 모드의 a는 쓰가가 가능한 스트림을 의미하되 여기서 말하는 쓰기는 덧붙여 쓰기이다.

스트림을 구분하는 기준2: 텍스트 모드, 바이너리 모드 윤성우의 열혈 C 프로그래밍 스트림을 구분하는 기준2: 텍스트 모드, 바이너리 모드 √ 스트림의 성격은 데이터의 종류에 따라서 다음과 같이 두 가지로 나뉜다. ▶ 텍스트 모드 스트림 (t) : 문자 데이터를 저장하는 스트림 ▶ 바이너리 모드 스트림 (b) : 바이너리 데이터를 저장하는 스트림 √ 문자 데이터와 바이너리 데이터 ▶ 문자 데이터 : 사람이 인식할 수 있는 유형의 문자로 이뤄진 데이터 - 파일에 저장된 문자 데이터는 Windows의 메모장으로 열어서 문자 확인이 가능 - 예 : 도서목록, 물품가격, 전화번호, 주민등록번호 ▶ 바이너리 데이터 : 컴퓨터가 인식할 수 있는 유형의 데이터 - 메모장과 같은 편집기로는 그 내용이 의미하는 바를 이해할 수 없다. - 예 : 음원 및 영상 파일, 그래픽 디자인 프로그램에 의해 저장된 디자인 파일

r w a b t rb a+t wt 파일의 개방모드 조합! r+ w+ a+ Read or Write Binary or Text 윤성우의 열혈 C 프로그래밍 파일의 개방모드 조합! r w a r+ w+ a+ Read or Write b t Binary or Text rb a+t wt 바이너리 데이터 읽기 스트림 텍스트 데이터 읽기 덧붙이기 스트림 텍스트 데이터 쓰기 스트림 t도 b도 붙지 않으면 텍스트 모드로 파일 개방

text.txt 텍스트 스트림이 별도로 존재하는 이유1 윤성우의 열혈 C 프로그래밍 C언어는 개행을 \n으로 표시하기로 약속하였다. 따라서 개행 정보를 저장할 때 C 프로그램상에서 우리는 \n을 저장한다.. 개행 정보로 저장된 \n은 문제가 되지 않을까? text.txt

text.txt 텍스트 스트림이 별도로 존재하는 이유2 윤성우의 열혈 C 프로그래밍 ▶ Windows \r\n 개행을 \n으로 표현하지 않는 운영체제는 \n을 전혀 다르게 해석하게 된다. 운영체제 별 개행의 표시 방법 ▶ Windows \r\n ▶ Linux \n ▶ Mac \r

텍스트 스트림이 별도로 존재하는 이유3 윤성우의 열혈 C 프로그래밍 개행 정보를 정확히 저장하기 위해서는 위와 같은 종류의 변환 과정을 거쳐야 한다. 텍스트 모드로 데이터를 입출력 하면 이러한 형태의 변환이 운영체제에 따라서 자동으로 이뤄진다.

윤성우의 열혈 C 프로그래밍 Chapter 24-3. 파일 입출력 함수의 기본 윤성우 저 열혈강의 C 프로그래밍 개정판

Chapter 21에서 학습한 파일 입출력 함수들 윤성우의 열혈 C 프로그래밍 Chapter 21에서 학습한 파일 입출력 함수들 텍스트 데이터 입출력 함수들 int fputc(int c, FILE * stream); // 문자 출력 int fgetc(FILE * stream); // 문자 입력 int fputs(const char * s, FILE * stream); // 문자열 출력 char * fgets(char * s, int n, FILE * stream); // 문자열 입력 당시에는 매개변수 stream에 stdin 또는 stdout을 인자로 전달하여 콘솔을 대상으로 입출력을 진행하였지만, 위의 함수들은 FILE 구조체의 포인터를 인자로 전달하여 파일을 대상으로 입출력을 진행할 수 있는 함수들이다.

파일 입출력의 예 윤성우의 열혈 C 프로그래밍 실행결과 write 순서대로 read해야 한다! 문자 A와 B가 fp가 가리키는 파일에 저장 실행결과 두 개의 문자열이 fp가 가리키는 파일에 저장 \n을 만날때까지 read 파일에 저장된 문자열의 끝에는 널이 존재하지 않는다. 때문에 파일을 대상으로 문자열을 입출력 할 때에는 개행을 의미하는 \n을 문자열의 마지막에 넣어줘야 한다. \n을 기준으로 문자열을 구분하기 때문이다. \n을 만날때까지 read

feof 함수 기반의 파일복사 프로그램 윤성우의 열혈 C 프로그래밍 문자 단위 파일복사 프로그램 파일의 끝을 확인해야 하는 경우 이 함수가 필요하다. 파일 입력 함수는 오류가 발생하는 경우에도 EOF를 반환한다. 따라서 EOF의 반환원인을 확인하려면 이 함수를 호출해야 한다. EOF가 반환이 되면... feof 함수호출을 통해서 EOF 반환 원인을 확인!

문자열 단위 파일복사 프로그램 윤성우의 열혈 C 프로그래밍 문자 단위로 복사를 진행하느냐 문자열 단위로 복사를 진행하느냐의 차이만 있을 뿐! EOF가 반환이 되면... feof 함수호출을 통해서 EOF 반환 원인을 확인!

바이너리 데이터의 입출력: fread 윤성우의 열혈 C 프로그래밍 int main(void) { int buf[12]; . . . . fread((void*)buf, sizeof(int), 12, fp); sizeof(int) 크기의 데이터 12개를 fp로부터 읽어 들여서 배열 buf에 저장하라!

바이너리 데이터의 입출력: fwrite 윤성우의 열혈 C 프로그래밍 int main(void) { int buf[7]={1, 2, 3, 4, 5, 6, 7}; . . . . fwrite((void*)buf, sizeof(int), 7, fp); sizeof(int) 크기의 데이터 7개를 buf로부터 읽어서 fp에 저장해라!

바이너리 파일 복사 프로그램 1. 2. 1. 2. 윤성우의 열혈 C 프로그래밍 파일의 끝에 도달해서 buf를 다 채우지 못한 경우에 참이 된다! 2. feof 함수호출의 결과가 참이면 파일의 끝에 도달했다는 의미이므로 마지막으로 읽은 데이터를 파일에 저장하고 프로그램을 종료한다!

Chapter 24-4. 텍스트 데이터와 바이너리 데이터를 동시에 입출력 하기 윤성우의 열혈 C 프로그래밍 Chapter 24-4. 텍스트 데이터와 바이너리 데이터를 동시에 입출력 하기 윤성우 저 열혈강의 C 프로그래밍 개정판

서식에 따른 데이터 입출력: fprintf, fscanf 윤성우의 열혈 C 프로그래밍 서식에 따른 데이터 입출력: fprintf, fscanf fprintf 함수를 이용하면 어떻게 텍스트 & 바이너리 데이터를 동시에 출력할 수 있을까? fprintf 함수는 printf 함수와 그 사용방법이 매우 유사하다. 다만 fp를 대상으로 조합이 된 문자열이 출력(저장)될 뿐이다. fscanf 함수를 이용하면 어떻게 텍스트 & 바이너리 데이터를 동시에 입력할 수 있을까? sprintf 함수는 printf 함수와 그 사용방법이 매우 유사하다. 다만 fp를 대상으로 서식문자의 조합 형태대로 데이터가 입력될 뿐이다.

fprintf & fscanf 관련 예제 윤성우의 열혈 C 프로그래밍 실행결과 실행결과 저장하는 데이터가 문자열이므로 텍스트 모드로 개방한다! 실행결과

Text/Binary의 집합체인 구조체 변수 입출력 윤성우의 열혈 C 프로그래밍 Text/Binary의 집합체인 구조체 변수 입출력 바이너리 모드로 통째로 구조체 변수를 저장 바이너리 모드로 통째로 구조체 변수를 복원 구조체 변수의 입출력은 생각보다 어렵지 않다. fread & fwrite 함수 기반으로 통째로 입출력 하면 된다. 실행결과

Chapter 24-5. 임의 접근을 위한 ‘파일 위치 지시자’의 이동 윤성우의 열혈 C 프로그래밍 Chapter 24-5. 임의 접근을 위한 ‘파일 위치 지시자’의 이동 윤성우 저 열혈강의 C 프로그래밍 개정판

파일 위치 지시자란? 윤성우의 열혈 C 프로그래밍 • FILE 구조체의 멤버 중 하나. • read 모드로 오픈 된 파일 위치 지시자: “어디까지 읽었더라?”에 대한 답 • write 모드로 오픈 된 파일 위치 지시자: “어디부터 이어서 쓰더라?”에 대한 답 • 즉, Read/Write에 대한 위치 정보를 갖고 있다. 따라서 파일 입출력과 관련이 있는 fputs, fread, fwrite와 같은 함수가 호출될 때마다 파일 위치 지시자의 참조 위치는 변경이 된다.

파일 위치 지시자의 이동: fseek 윤성우의 열혈 C 프로그래밍 파일 위치 지시자의 참조 위치를 변경시키는 함수

fseek 함수의 호출의 예 윤성우의 열혈 C 프로그래밍 실행결과 1 2 3 4 5 6 7 8 9 e(eof)

현재 파일 위치 지시자의 위치는?: ftell 윤성우의 열혈 C 프로그래밍 현재 파일 위치자의 위치 정보를 반환하는 함수! 현재 위치 저장 맨 뒤로 이동 저장해 놓은 위치 복원 실행결과

Chapter 24가 끝났습니다. 질문 있으신지요?