Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.

Slides:



Advertisements
Similar presentations
C 프로그래밍 기초.
Advertisements

제12장 표준 입출력과 파일 입출력.
[ 단원 12 ] 파일처리 부산대학교 남 태 우.
Linux/UNIX Programming
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
6 레이스 컨디션.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
-Part3- 제3장 콘솔 입출력과 파일 입출력.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
Department of Computer Engineering
Part 12 구조체와 공용체 ©우균, 창병모 ©우균, 창병모.
C 프로그래밍 - 기본 비트 캠프.
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
처음으로 배우는 C 프로그래밍 제2부 기초 제5장 반복문.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
C언어를 이용한 화일처리.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제16장 스트림과 파일 입출력 C Express.
6장 비연결형 지향 프로토콜 Database Lab 강 우 석.
10장 메모리 관리.
Department of Computer Engineering
레이스 컨디션 컴퓨터공학과 4학년 이교욱.
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Chapter 14 이진 데이터 파일과 임의 접근 데이터 파일 C 이진 데이터 파일 임의 접근 파일.
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
4장 파일.
6장 파일 및 레코드 잠금.
Chapter 11 Strings.
Chapter 4. 보조자료 - 파일 입출력 파일의 기본 개념과 특징을 이해한다. 파일 처리 과정을 이해한다.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
Department of Computer Engineering
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
Chapter 13 Input/Output and Files
9장 파일 입출력.
17강 파일처리함수(1) 강 의 내 용 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정
18강 파일처리함수(2) 강 의 내 용 순차파일 만들기와 읽기 순차파일 입출력함수 랜덤파일 처리
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
Linux Programming Spring 2008
Linux/UNIX Programming
24장. 파일 입출력.
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.
조 병 규 Software Quality Lab. 한국교통대학교
Linux/UNIX Programming
-Part2- 제1장 1차원 배열이란 무엇인가.
파일 입출력.
C89(C++03) 프로그래밍 (Part 2) 7 배열 8 변수 범위 9 포인터 10 유도 자료형.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
컴퓨터 프로그래밍 기초 - 11th : 파일 입출력 및 구조체 -
구조체(struct)와 공용체(union)
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
국어지도 유아교육과 권수연 김아람 중등특수교육과 박수진 양한솔
9주차: Using Files and Others
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
C.
2019 1학기 응용프로그래밍 - 파일 처리 01 파일 열기 02 파일 저장과 내용 읽기 03 이진파일 처리 04 임의접근 파일 처리 05 파일 관련 함수들.
3장 파일 다루기 한빛미디어(주).
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
Presentation transcript:

Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모

이 장의 내용 파일과 파일 포인터 파일 입출력 함수 임의 접근 파일 처리 ©우균, 창병모

14.1 파일과 파일 포인터 ©우균, 창병모

파일 C의 파일은 모든 데이터를 연속된 바이트 형태로 저장한다. ©우균, 창병모

C 언어의 파일 종류 텍스트 파일(text file) 이진 파일(binary file) 사람들이 읽을 수 있는 문자들을 저장하고 있는 파일 텍스트 파일에서 “한 줄의 끝”을 나타내는 표현은 파일이 읽어 들여질 때, C 내부의 방식으로 변환된다. 이진 파일(binary file) 모든 데이터는 있는 그대로 바이트의 연속으로 저장 이진 파일을 이용하여 메모리에 저장된 변수 값 형태 그대로 파일에 저장할 수 있다. ©우균, 창병모

파일 열기 파일을 사용하기 위해서는 반드시 먼저 파일 열기(fopen)를 해야 한다. FILE 구조체 stdio.h에 정의되어 있음. 열려진 파일의 현재 상태를 나타내는 필드 변수들 특히 파일 입출력에 사용되는 버퍼 관련 변수들 ©우균, 창병모

표준 입출력 stdin, stdout, stderr 각각 표준 입력, 표준 출력, 표준 오류를 나타내는 FILE 포인터 C 프로그램이 실행되면 자동적으로 열리고 프로그램이 종료될 때 자동으로 닫힘. ©우균, 창병모

파일 열기 함수 fopen() FILE *fopen(const char *filename, const char *mode); const char *filename: 파일명에 대한 포인터 const char *mode: 모드로 파일을 여는 형식 예 FILE *fp; fp = fopen("c:\work\text.txt", "r"); if (fp == NULL) {     printf("파일 열기 오류\n"); } fp = fopen("outdata.txt", "w"); fp = fopen("outdata.txt", "a"); ©우균, 창병모

fopen 모드 ©우균, 창병모

파일 닫기 파일을 열어서 사용한 후에는 파일을 닫아야 한다. 예 int fclose(FILE *fp ); fp는 fopen 함수에서 받았던 포인터 닫기에 성공하면 0, 오류일 때는 EOF( -1)를 리턴한다. 예 fclose(fp); ©우균, 창병모

14.2 파일 입출력 함수 ©우균, 창병모

파일 입출력 함수 ©우균, 창병모

문자 단위 입출력 fgetc() 함수와 fputc() 함수 int fgetc(FILE *fp); 파일에 문자 단위 입출력을 할 수 있다. int fgetc(FILE *fp); getc 함수는 fp가 지정한 파일에서 한 문자를 읽어서 리턴한다. 파일 끝에 도달했을 경우에는 EOF(-1)를 리턴한다. int fputc(int c, FILE *fp); putc 함수는 파일에 한 문자씩 출력하는 함수 리턴값으로 출력하는 문자 리턴 출력시 오류가 발생하면 EOF(-1) 리턴 ©우균, 창병모

©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

©우균, 창병모

기타 파일 관련 함수 int feof(FILE *fp) int ungetc(int c, FILE *p) int fflush(FILE *fp) 아직 기록되지 않고 버퍼에 남아 있는 데이터를 fp가 가리키는 출력 파일에 보낸다. 버퍼 비우기 기능을 수행하는 함수이다. ©우균, 창병모

줄 단위 입출력 fgets() 함수와 fputs() 함수 char* fgets(char *s, int n, FILE *fp); 텍스트 파일에서 한 줄씩 읽거나 쓸 수 있다. char* fgets(char *s, int n, FILE *fp); 파일로부터 한 줄을 읽어서 문자열 포인터 s에 저장하고 s를 리턴 개행문자('\n')나 EOF를 만날 때까지 파일로부터 최대 n-1 개의 문자를 읽고 읽어온 데이터의 끝에는 NULL 문자를 붙여준다. 파일을 읽는 중 파일 끝 혹은 오류가 발생하면 NULL 포인터 리턴. int fputs(const char *s, FILE *fp); 문자열 s를 파일 포인터 fp가 가리키는 파일에 출력 성공적으로 출력한 경우에는 출력한 바이트 수를 리턴 출력할 때 오류가 발생하면 EOF 값을 리턴 ©우균, 창병모

©우균, 창병모

©우균, 창병모

포맷 입출력 fprintf() 함수 fscanf() 함수 int fprintf(FILE *fp, const char *format, ...); fprintf 함수의 첫 번째 인수 fp는 츨력할 파일에 대한 FILE 포인터 두 번째부터의 인수는 printf 함수와 동일 int fscanf(FILE *fp, const char *format, ...); fscanf 함수의 첫 번째 인수 fp는 입력받을 파일에 대한 FILE 포인터 두 번째부터의 인수는 scanf 함수와 동일 ©우균, 창병모

©우균, 창병모

student.h /실행 결과 ©우균, 창병모

©우균, 창병모

실행 결과 ©우균, 창병모

14.3 이진 파일 ©우균, 창병모

블록 입출력 fread()와 fwrite() 한번에 일정한 크기의 데이터를 파일에 읽거나 쓰기 위한 입출력 함수 int fread(void *buf, int size, int n, FILE *fp); fp가 가리키는 파일에서 size 크기의 블록(연속된 바이트)을 n개  읽어서 버퍼 포인터 buf가 가리키는 곳에 저장 읽어온 블록의 개수를 리턴 int fwrite(const void *buf, int size, int n, FILE *fp); 파일 포인터 fp가 지정한 파일에 버퍼 buf에 저장되어 있는 size 크기의 블록(연속된 바이트)을 n개 기록 성공적으로 출력한 블록 개수를 리턴 ©우균, 창병모

블록 입출력 기본 아이디어 예: record 저장/읽기 어떤 자료형의 데이터이던지 그 데이터를 연속된 바이트로 해석해서 파일에 저장 파일에 저장된 데이터를 연속된 바이트 형태로 읽어서 원래 자료형 변수에 순서대로 저장하여 원래 데이터를 그대로 복원 예: record 저장/읽기 struct student record; FILE *fp = fopen("intfile", "wb+"); ©우균, 창병모

fwrite(), fread() fread(&record, sizeof(record), 1, fp); ©우균, 창병모

이진 파일 입출력 모드 ©우균, 창병모

©우균, 창병모

©우균, 창병모

©우균, 창병모

14.4 임의 접근 파일 처리 ©우균, 창병모

파일 내 위치 파일 위치(file position) 파일 위치 지정자(file position indicator) 열린 파일에서 다음 읽거나 기록할 파일 내 위치 파일 위치 지정자(file position indicator) 시스템 내에 그 파일의 파일 위치를 저장하고 있다. ©우균, 창병모

파일 위치 관련 함수 fseek(FILE *fp, long offset, int mode) rewind(FILE *fp) 파일 위치 지정자를 임의로 설정할 수 있는 함수이다. rewind(FILE *fp) 파일 위치를 파일 시작점에 위치시켜 처음부터 다시 읽을 수 있도록 ftell(FILE *fp) 파일의 현재 파일 위치를 나타내는 파일 위치 지정자 값 리턴 ©우균, 창병모

파일 위치 관련 함수 fseek(FILE *fp, long offset, int mode) 모드(mode) 기준으로 오프셋(offset)만큼 옮긴다.   ©우균, 창병모

fseek() 사용 예 예1 fseek(fp, 0L, SEEK_SET) 파일처음으로 이동 fseek(fp, 100L, SEEK_CUR)  현재 위치에서 100 바이트 우로 이동 fseek(fp, 0L, SEEK_END)   파일 끝으로 이동    예2 fseek(fp, n * sizeof(record), SEEK_SET) n+1번째 레코드 시작위치로 이동 fseek(fp, sizeof(record), SEEK_CUR) 다음 레코드 시작위치로 이동 fseek(fp, –sizeof(record), SEEK_CUR) 전 레코드 시작위치로 이동 ©우균, 창병모

fseek() 사용 예 예3 fwrite(&record1, sizeof(record), 1, fp); fseek(fp, sizeof(record), SEEK_END); fwrite(&record3, sizeof(record), 1, fp); ©우균, 창병모

파일 위치 관련 함수 rewind(FILE *fp) ftell(FILE *fp) 파일 위치를 파일 시작점에 위치시켜 처음부터 다시 읽을 수 있도록 한다. ftell(FILE *fp) 파일의 현재 파일 위치를 나타내는 파일 위치 지정자 값 리턴 ©우균, 창병모

예제 프로그램 구조체를 이용하여 학생 정보를 파일에 저장한다 시작 ID(START_ID)로 부터 상대적인 위치에 저장 (record.id — START_ID)*sizeof(record) 파일에 저장된 특정 학생의 데이터를 검색해서 출력한다. 시작 ID(START_ID)로 부터 상대적인 위치에서 읽는다 (id — START_ID) * sizeof(record) ©우균, 창병모

©우균, 창병모

©우균, 창병모

©우균, 창병모

©우균, 창병모

Key Point ©우균, 창병모

Key Point 1 파일은 모든 데이터를 연속된 바이트 형태로 저장한다. 파일을 사용하기 위해서는 반드시 파일 열기(fopen)를 먼저 해야 한다. 파일 열기(fopen)를 하면 FILE 구조체에 대한 포인터가 리턴된다. FILE 포인터는 열린 파일을 지정한다. fgetc() 함수와 fputc() 함수 파일에 문자 단위 입출력을 할 수 있다. fgets() 함수와 fputs() 함수 텍스트 파일에서 한 줄씩 읽거나 쓸 수 있다. ©우균, 창병모

Key Point 2 fseek() 함수 fprintf() 함수 fscanf() 함수 fread()와 fwrite() 한번에 일정한 크기의 데이터를 파일에 읽거나 쓰기 위한 입출력 함수 파일 위치(file position) 열린 파일에서 다음 읽거나 기록할 파일 내 위치 파일 위치 지정자(file position indicator) 시스템 내에 그 파일의 파일 위치를 저장하고 있다. fseek() 함수 파일 위치 지정자를 임의로 설정할 수 있는 함수이다. ©우균, 창병모

프로그래밍 실습 ©우균, 창병모

▶ 프로그래밍 실습 도서관리 시스템 1. 헤더 파일 book.h 작성 도서에 대한 데이터 입력과 도서에 대한 열람 기능을 제공하는 간단한 도서관리 시스템을 구현해보자. 이 시스템은 도서 입력과 도서 열람을 위한 두 개의 프로그램으로 구성된다. 1. 헤더 파일 book.h 작성 12장에서 정의한 struct book을 확장해서 book.h에 새로운 구조체를 작성한다. ©우균, 창병모

▶ 프로그래밍 실습 2. 도서 입력 프로그램 도서관에 새로운 책이 들어올 때마다 책에 대한 정보를 입력받아 파일에 저장한다. 책에 대한 정보는 이름, 출판일, 저자, 가격 등이며 책이 들어오는 순서에 따라 일련번호를 붙인다. 2.1 book.h 헤더 파일을 include 한다. 2.2 FILE 포인터, struct book 타입의 필요한 변수를 선언한다. 2.3 fopen() 함수를 이용하여 도서 정보를 저장하기 위한 파일을 연다. 2.4 scanf() 함수를 이용하여 새로 들어온 책에 대한 정보를 입력 받아 구조체 변수에 저장한다. 2.5 fwrite() 함수를 이용하여 구조체 변수에 있는 책 정보를 파일에 저장한다. 2.6 2.3부터 2.5의 과정을 더 이상 입력이 없을 때까지 반복한다. ©우균, 창병모

▶ 프로그래밍 실습 3. 도서 열람 프로그램 책의 일련번호를 입력받아 해당 책 정보를 찾아 츨력해 주는 프로그램을 작성한다. 3.1 book.h 헤더 파일을 include 한다. 3.2 FILE 포인터, struct book 타입의 필요한 변수를 선언한다. 3.3 fopen() 함수를 이용하여 도서 정보를 저장하기 위한 파일을 연다. 3.4 책 일련번호를 입력받고 해당 책의 레코드 위치를 계산한다. 3.5 fread() 함수를 이용하여 해당 레코드를 읽어서 구조체 변수에 저장한다. 3.6 읽어 온 책에 대한 정보를 서식에 맞게 츨력한다. 3.7 3.3부터 3.6까지 과정을 반복한다. ©우균, 창병모