C언어 프로그래밍의 이해 Ch14. 파일 입출력.

Slides:



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

2007 1학기 12 배열.
제12장 표준 입출력과 파일 입출력.
[ 단원 12 ] 파일처리 부산대학교 남 태 우.
C언어 입문 강의 계획서.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
6 레이스 컨디션.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
-Part3- 제3장 콘솔 입출력과 파일 입출력.
프로그래밍실습 제 18 강.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
제1장 코드와라이브러리 Page 1 ~ 30 ■■■■■ ■ ■.
Department of Computer Engineering
C 프로그래밍 - 기본 비트 캠프.
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
C언어: 배열 (Arrays).
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
조 병 규 Software Quality Lab. 한국교통대학교
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
제15장 파일 입출력 문자열을 출력하는 여러가지 방법 (15-2쪽) 문자열만 처리하는 입출력 함수
쉽게 풀어쓴 C언어 Express 제16장 스트림과 파일 입출력 C Express.
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
Using Standard I/O on Sockets
Department of Computer Engineering
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
C언어 프로그래밍의 이해 Ch05. 명령문 Phylogenetic: 계통, 발생(학)의.
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
Chapter 11 Strings.
Chapter 4. 보조자료 - 파일 입출력 파일의 기본 개념과 특징을 이해한다. 파일 처리 과정을 이해한다.
11 표준 입출력과 파일 입출력 데이터를 읽고 쓰는 다양한 방법 익히기!.
Department of Computer Engineering
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
Chapter 13 Input/Output and Files
9장 파일 입출력.
17강 파일처리함수(1) 강 의 내 용 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정
18강 파일처리함수(2) 강 의 내 용 순차파일 만들기와 읽기 순차파일 입출력함수 랜덤파일 처리
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
Linux Programming Spring 2008
제 9장 입력과 출력 Hello!! C 언어 강성호 김학배 최우영.
11장. 1차원 배열 IT응용시스템공학과 김 형 진 교수.
24장. 파일 입출력.
게임프로그래밍 I - 1차원 배열 - 공주대학교 게임디자인학과 박 찬 교수 2011년 4월 25일.
많은 자료가 있을 때는 배열을 사용한다. 아래는 배열을 사용하는 경우의 예시이다. 상황에 따라 1차원 또는 다차원 배열 필요.
조 병 규 Software Quality Lab. 한국교통대학교
Fflush 사용이유 및 방법 [이유] 키보드에서 입력된 내용은 입력버퍼에 저장되었다가 Enter 키가 들어오면 프로그램으로 전달됨 이 때 입력버퍼에 있는 Enter 키도 프로그램으로 전달됨 그러므로 아래와 같은 프로그램에서 문자 하나를 입력해도 Enter키도 입력된 것으로.
파일 입출력.
C언어 프로그래밍의 이해 Ch05. 명령문.
C언어 (8) 정명희.
Homework #7 (1/4) 다음 프로그램을 작성하고, 프로그램과 실행 결과를 함께 제출한다.
1학기 정리 지난 학기에 배운 내용을 복습해 본다..
구조체(struct)와 공용체(union)
실습과제 1번 생성된 파일 basic.txt를 프로젝트 폴더에서 메모장으로 열고 내용을 확인
9주차: Using Files and Others
argc, argv 의 사용방법 #include <stdio.h>
개정판 누구나 즐기는 C언어 콘서트 제10장 문자열 출처: pixabay.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
11장. 1차원 배열.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
Presentation transcript:

C언어 프로그래밍의 이해 Ch14. 파일 입출력

목차 14.1 입출력 14.2 스트림과 파일 14.3 파일 시스템의 개요 14.4 fread()와 fwrite() Ch14. 파일 입출력 목차 14.1 입출력 14.2 스트림과 파일 14.3 파일 시스템의 개요 14.4 fread()와 fwrite() 14.5 fseek()와 랜덤 액세스 입출력 14.6 fprintf()와 fscanf() 14.7 표준 스트림 2

Ch14. 파일 입출력 14.1 입출력 C 언어는 어떤 입출력 문장도 포함하지 않는 대신에, 모든 입출력 동작들은 C 표준 라이브러리의 함수들을 통해서 수행 C의 입출력 시스템은 자료들을 자신의 내부 2진 표현으로 또는 인간이 읽을 수 있는 텍스트 포맷으로 전달될 수 있도록 함 3

14.2 스트림과 파일 C 입출력 시스템은 프로그래머와 실제 장치간의 어떤 수준의 추상화 제공 Ch14. 파일 입출력 14.2 스트림과 파일 C 입출력 시스템은 프로그래머와 실제 장치간의 어떤 수준의 추상화 제공 추상화를 스트림(stream)이라고 하며, 실제 메모리 저장장치를 파일(file)이라고 한다 스트림 C 파일 시스템은 터미널, 디스크 드라이버, 및 테입 드라이버 등을 포함한 다양한 장치들과 동작하도록 설계 스트림들은 매우 독립된 장치이기 때문에, 디스크 파일에 출력하는 함수는 콘솔 같은 다른 종류의 장치에 출력하는 데도 동시에 사용될 수 있음 스트림에는 텍스트(text)와 2진(binery) 스트림 두 가지 유형이 있음 4

14.2 스트림과 파일 스트림 텍스트 스트림 텍스트 스트림(text stream)은 문자들의 시퀀스 Ch14. 파일 입출력 14.2 스트림과 파일 스트림 텍스트 스트림 텍스트 스트림(text stream)은 문자들의 시퀀스 변환이 가능하기 때문에, 출력(또는 입력)되는 문자들은 외부 장치의 문자들과 같지 않을 수도 있음 2진 스트림 외부 장치의 바이트들과 일대일로 대응되는 바이트들의 시퀀스 어떠한 문자 변환도 일어나지 않으며, 출력(또는 입력)되는 바이트들의 수는 외부 장치에서의 수와 같음 5

14.2 스트림과 파일 파일 C에서, 파일(file)은 디스크 파일에서 터미널 또는 프린터에 이르기까지 어떤 것도 될 수 있음 Ch14. 파일 입출력 14.2 스트림과 파일 파일 C에서, 파일(file)은 디스크 파일에서 터미널 또는 프린터에 이르기까지 어떤 것도 될 수 있음 열기(open) 연산 특정 스트림과 파일을 연관 시킴 일반 파일이 열리면, 정보는 이것과 사용자의 프로그램 사이에서 교환 가능 닫기 연산 파일과 특정 스트림의 관계를 끊는 연산 출력하려고 열었던 파일을 닫으면, 이것과 연관된 스트림의 내용이 외부 장치로 출력 (스트림을 플러슁(flushmg)) 6

14.2 스트림과 파일 파일 파일과 연관된 각 스트림은 FILE형의 파일 제어구조를 가지며, 구조는 헤더 STDIO.H에 정의 Ch14. 파일 입출력 14.2 스트림과 파일 파일 파일과 연관된 각 스트림은 FILE형의 파일 제어구조를 가지며, 구조는 헤더 STDIO.H에 정의 C에서, 모든 입출력 연산들을 수행하기 위해서 스트림만을 생각하고 단지 하나의 파일 시스템만을 사용하면 되는 것 C 입출력 시스템은 각 장치로부터의 입력 또는 출력을 쉽게 관리하는 스트림으로 자동 변환 7

Ch14. 파일 입출력 14.3 파일 시스템의 개요 ANSI C 파일 시스템은 여러 가지 상호 연관된 함수들로 구성 8

14.3 파일 시스템의 개요 파일 포인터 파일 포인터는 ANSI C 입출력 시스템에서 공통적인 도구 Ch14. 파일 입출력 14.3 파일 시스템의 개요 파일 포인터 파일 포인터는 ANSI C 입출력 시스템에서 공통적인 도구 파일 포인터는 특정 파일의 이름, 상태, 및 현재 위치 등을 포함하는 특정 파일에 대한 여러 가지를 정의하는 정보에 대한 포인터 파일 포인터는 특정한 디스크 파일을 식별하고 입출력 함수들의 연산과 직접 연관된 스트림에 의해서 사용 파일 포인터는 FILE형의 포인터 변수 파일들을 읽거나 쓰기 위해서, 프로그램에서 파일 포인터를 사용 FILE *fp; 9

14.3 파일 시스템의 개요 파일 열기 fopen() 함수 fopen() 함수의 원형 Ch14. 파일 입출력 14.3 파일 시스템의 개요 파일 열기 fopen() 함수 파일을 사용하고 특정 스트림과 파일을 연결하기 위해서 스트림을 열고, 파일과 연관된 파일 포인터를 리턴 대부분의 경우에 파일은 디스크 파일 의미 fopen() 함수의 원형 filename은 올바른 파일 이름을 구성하는 문자열에 대한 포인터이며, 이것은 경로 정보도 포함 mode가 지적하고 있는 문자열은 특정 파일을 어떻게 열지를 결정 fopen() 함수는 파일 포인터를 리턴, 사용자 프로그램에서는 이 포인터의 값을 절대로 수정할 수 없음 만일 파일을 열 때 오류가 발생하면, fopen()은 널(null) 포인터를 리턴 파일은 텍스트 또는 2진 모드로 열 수 있음 FILE *fopen(const char *filename, const char *mode); 10

Ch14. 파일 입출력 14.3 파일 시스템의 개요 파일 열기 모드 값 11

14.3 파일 시스템의 개요 파일 열기 다음 코드는 출력을 위해서 TEST라는 파일을 열기 위해서 fopen()을 사용 Ch14. 파일 입출력 14.3 파일 시스템의 개요 파일 열기 다음 코드는 출력을 위해서 TEST라는 파일을 열기 위해서 fopen()을 사용 프로그램에서 파일을 열기 전에 파일의 오류체크, fopen()의 성공여부 확인 FILE *fp; fp = fopen("test", "w"); FILE *fp; if((fp = fopen("test","w")) == NULL) { printf("Cannot open file.\n"); exit(1); } 12

14.3 파일 시스템의 개요 파일 닫기 fclose() 함수 fclose() 함수의 원형 fopen()으로 열린 스트림을 닫음 Ch14. 파일 입출력 14.3 파일 시스템의 개요 파일 닫기 fclose() 함수 fopen()으로 열린 스트림을 닫음 아직 디스크 버퍼에 남아 있는 자료를 해당 파일에 쓰고, 그 파일에 대한 정상적인 운영체제 수준의 닫기를 수행 fclose()는 또한 스트림과 관련된 파일 제어 블록을 반환하여 다시 사용할 수 있도록 함 fclose() 함수의 원형 fp는 fopen()시에 리턴했던 파일 포인터 리턴값 0은 성공적으로 닫았음을 나타냄 오류가 발생하면, 이 함수는 EOF를 리턴 int fclose(FILE *fp); 13

14.3 파일 시스템의 개요 문자 쓰기 putc()와 fputc() 함수 함수의 원형 Ch14. 파일 입출력 14.3 파일 시스템의 개요 문자 쓰기 putc()와 fputc() 함수 이전의 C 버전들과의 일관성을 유지하기 위해서 모두 사용 putc() 함수는 이전에 fopen() 함수에 의해서 열린 파일에 문자를 사용 함수의 원형 fp는 fopen()에 의해서 리턴된 파일 포인터 ch는 출력할 문자, ch는 int로 정의되며, 단지 하위 바이트만을 사용 putc() 연산이 성공하면, 출력할 문자를 리턴하고, 그렇지 않으면 EOF를 리턴 int putc(int ch, FILE *fp); 14

14.3 파일 시스템의 개요 문자 읽기 getc()와 fgetc() 함수 getc()의 원형 텍스트 파일을 읽기 Ch14. 파일 입출력 14.3 파일 시스템의 개요 문자 읽기 getc()와 fgetc() 함수 getc() 함수는 이전에 fopen()에서 읽기 모드로 열린 파일로부터 문자들을 읽음 getc()의 원형 fp는 fopen()에서 리턴된 FILE형의 파일 포인터 getc()는 int형을 리턴하며, 상위 바이트는 0 getc() 함수는 파일의 끝에 도달하면 EOF를 리턴 오류가 발생해도 EOF를 리턴. 이때 어떤 오류가 발생했는지를 정확하게 결정하기 위해서 ferror() 사용 텍스트 파일을 읽기 int getc(FILE *fp); do { ch = getc(fp); } while(ch!=EOF); 15

14.3 파일 시스템의 개요 따라하기1(프로그램명: KTOD) Ch14. 파일 입출력 //파일을 생성하는 프로그램 #include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) { printf("You forgot to enter the filename.\n"); exit(1); } if((fp=fopen(argv[1], "w"))==NULL) { printf("Cannot open file.\n"); 16

14.3 파일 시스템의 개요 따라하기1(프로그램명: KTOD) Ch14. 파일 입출력 do { ch = getchar(); putc(ch, fp); } while(ch!='$'); fclose(fp); } KTOD test test 파일 17

14.3 파일 시스템의 개요 따라하기2(프로그램명: DTOS) Ch14. 파일 입출력 // 어떤 ASCII파일을 읽고, 그 내용을 화면에 출력하는 프로그램 #include <stdio.h> #include <stdlib.h> void main(int argc, char *argv[]) { FILE *fp; char ch; if(argc!=2) { printf("You forgot to enter the filename.\n"); exit(1); } if((fp=fopen(argv[1], "r"))==NULL) { printf("Cannot open file.\n"); ch = getc(fp); /* 한 문자 읽기 */ 18

14.3 파일 시스템의 개요 따라하기2(프로그램명: DTOS) Ch14. 파일 입출력 while(ch!=EOF) { putchar(ch); /* 화면에 출력 */ ch = getc(fp); } fclose(fp); printf("\n"); DTOS test 19

14.3 파일 시스템의 개요 fputs()와 fgets()로 문자열 작업하기 Ch14. 파일 입출력 14.3 파일 시스템의 개요 fputs()와 fgets()로 문자열 작업하기 getc()와 putc()와 더불어, C는 디스크 파일에 문자열을 읽고 쓰는 fgets()와 fputs() 함수를 제공 이 함수들은 putc()와 getc()처럼 동작하지만, 하나의 문자를 읽거나 쓰는 것이 아니라, 문자열을 읽거나 쓴다 함수 원형 fputs()와 fgets()의 원형은 STDIO.H int fputs(const char *str, FILE *fp); char *fgets(char *str, int length, FILE *fp); 20

14.3 파일 시스템의 개요 fputs()와 fgets()로 문자열 작업하기 fputs() 함수 fgets() 함수 Ch14. 파일 입출력 14.3 파일 시스템의 개요 fputs()와 fgets()로 문자열 작업하기 fputs() 함수 str이 지적하고 있는 문자열을 지정된 스트림에 쓰며, 오류가 발생하면, EOF을 리턴 fgets() 함수 뉴라인 문자를 읽거나 또는 length-1 개의 문자를 읽을 때까지 지정된 스트림으로부터 문자열을 읽음 뉴라인이 읽혀지면, 이것은 (gets() 함수와는 달리) 문자열의 일부가 됨 만일 호출이 성공하면 str을 리턴하며 오류가 발생하면 널(null) 포인터를 리턴 21

Ch14. 파일 입출력 14.3 파일 시스템의 개요 따라하기4 //fputs()예제, 키보드에서 문자열을 읽어 이들을 Test 파일에 쓴다. 프로그램을 종료하기 위해 빈 라인 입력 #include <stdio.h> #include <stdlib.h> #include <string.h> void main(void) { char str[80]; FILE *fp; if((fp = fopen("TEST.txt", "w"))==NULL) { printf("Cannot open file.\n"); exit(1); } do { printf("Enter a string (CR to quit):\n"); gets(str); strcat(str, "\n"); /* 뉴라인 추가 */ fputs(str, fp); } while(*str!='\n'); I love Jerry~!! Enter \0 Enter 22

14.3 파일 시스템의 개요 스트림 비우기(flushing) Ch14. 파일 입출력 14.3 파일 시스템의 개요 스트림 비우기(flushing) 출력 스트림의 내용을 비우고자 할 때, fflush() 함수를 사용 함수 원형 fflush() 함수는 어떤 버퍼 자료의 내용을 fp와 연관된 파일에 쓴다 만일 fp를 널(null)로 하여 fflush()를 호출하면, 출력을 위해서 열린 모든 파일들은 비워짐 fflush() 함수의 호출이 성공하면 0을 리턴하고, 그렇지 않으면, EOF을 리턴 int fflush(FILE *fp); 23

Ch14. 파일 입출력 14.4 fread()와 fwrite 한 바이트보다 긴 자료형을 읽고 쓰기 위해서, ANSI C 파일 시스템은 fread()와 fwrite() 함수를 제공 ANSI C 입출력 시스템에서는 파일 위치 지시자를 설정하는 fseek()를 이용하여 어느 곳에서나 읽고 쓸 수 있도록 함 ANSI C 입출력 시스템은 fprintf()와 fscanf()를 포함 이 함수들은 파일에서 동작한다는 것만 제외하고는 printf()와 scanf()와 매우 유사 속도나 또는 파일 크기가 중요한 분야에서는 fread()와 fwrite()를 사용하는 것이 좋음 24

Ch14. 파일 입출력 실습 과제 <1>따라하기1 ~ 따라하기4 실습 25

Q&A 26