제12장 표준 입출력과 파일 입출력.

Slides:



Advertisements
Similar presentations
03 변수와 자료형 세종대학교 최옥경 교수 참고 : 한빛미디어 뇌를 자극하는 C, INFINITY Perfect C.
Advertisements

Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.
C 프로그래밍 기초.
프로그래밍1 및 실습 (C언어) - 3장 기본자료형 (3.6부터 끝까지) -
데이터의 표현과 연산 (1) (Chapter 3)
[ 단원 12 ] 파일처리 부산대학교 남 태 우.
C++ Tutorial 1 서강대학교 데이터베이스 연구실.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express.
2014 ITA 8월 강의 C Programming -1주차- C언어 기초 정대진 ( )
-Part3- 제3장 콘솔 입출력과 파일 입출력.
프로그래밍실습 제 18 강.
C 프로그래밍 소개 숙명여대 창병모 2011 가을.
01 화일의 기본 개념 02 화일 저장장치 03 화일 입출력 제어 04 순차화일 05 화일의 정렬 06 화일의 합병
Chapter 10– 표준 함수(1) Outline 10.1 스트림과 파일 10.2 입출력 표준 함수
제3장 추가 실습 3장 관련 C 언어 프로그래밍 실습.
쉽게 풀어쓴 C언어 Express 제18장 입출력과 라이브러리 함수 C Express.
컴퓨터의 기초 제 4강 - 표준 입출력, 함수의 기초 2006년 4월 10일.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
쉽게 풀어쓴 C언어 Express 제16장 파일 입출력 C Express Slide 1 (of 23)
HW#1 Source 파일 제출 3.20(수)까지 제출 학번_이름_01.c
Part 14 파일 입출력 ©우균, 창병모 ©우균, 창병모.
C언어를 이용한 화일처리.
쉽게 풀어쓴 C언어 Express 제16장 스트림과 파일 입출력 C Express.
Chapter 13 문자 데이터와 문자열 문자 데이터 문자열.
변수와 자료형.
C 7장. 배열과 문자열 #include <stdio.h> int main(void) { int num;
기초C언어 제3주 C프로그램 구성요소, 변수와 자료형 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
쉽게 풀어쓴 C언어 Express 제3장 C프로그램 구성요소 C Express.
21장. 문자와 문자열 처리 함수.
9장 파일 입출력.
표준 출력 함수 printf 출력 데이터 서식화(formatting) 표준 입력 함수 scanf 입력 데이터 서식화
처음으로 배우는 C 프로그래밍 제5부 추가적인 화제들 제 11 장 파일 처리.
Part 04 입출력과 전처리 ©우균, 창병모 이 슬라이드는 부산대학교 우균이 작성하였습니다. 오류나 수정할 사항 있으면 연락 주세요.
Chapter 14 이진 데이터 파일과 임의 접근 데이터 파일 C 이진 데이터 파일 임의 접근 파일.
파일 기술자 복사 파일 기술자 복사 : dup(2) 파일 기술자 복사 : dup2(3)
12장 파일처리와 매크로 파일 입출력 함수 문자 입출력 함수 라인 입출력 함수 불록 입출력 함수 매크로.
제 2 장 변수와 상수.
Chapter 11 Strings.
Chapter 4. 보조자료 - 파일 입출력 파일의 기본 개념과 특징을 이해한다. 파일 처리 과정을 이해한다.
C언어 프로그래밍의 이해 Ch14. 파일 입출력.
Department of Computer Engineering
14주차.
10장 C 표준 파일 입출력 子曰 學而時習(실습?)之 不亦悅乎.
Chapter 13 Input/Output and Files
17강 파일처리함수(1) 강 의 내 용 파일 입출력의 개념 파일포인터를 이용한 입출력 파일 입출력 과정
18강 파일처리함수(2) 강 의 내 용 순차파일 만들기와 읽기 순차파일 입출력함수 랜덤파일 처리
23강 API - II - 약방의 감초 Random 클래스 - Scanner 및 Sysout - Wrapper 클래스의 이해
2장 표준 입출력 표준 입출력 함수의 종류 형식화된 입출력 문자 입출력 문자열 입출력.
Linux Programming Spring 2008
제2장 데이터형과 표준 입출력문 문봉근.
2019년 2월 24일 오후 4시 59분 제2장 표준 입출력 함수
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 11. 1차원 배열.
24장. 파일 입출력.
Formatted Input/Output
컴퓨터 프로그래밍 기초 - 4th : 수식과 연산자 -
3장. 변수와 연산자. 3장. 변수와 연산자 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, / 3-1 연산자, 덧셈 연산자 연산자란 무엇인가? 연산을 요구할 때 사용되는 기호 ex : +, -, *, /
조 병 규 Software Quality Lab. 한국교통대학교
Chapter 05. 입출력 함수.
파일 입출력.
누구나 즐기는 C언어 콘서트 제2장 기초 사항 IT응용시스템공학과 김형진 교수.
C 13장. 입출력 라이브러리 #include <stdio.h> int main(void) { int num;
C.
printf("Global Korea\n");
개정판 누구나 즐기는 C언어 콘서트 제3장 변수와 자료형 출처: pixabay.
Chapter 09. 배열.
2019 1학기 응용프로그래밍 - 파일 처리 01 파일 열기 02 파일 저장과 내용 읽기 03 이진파일 처리 04 임의접근 파일 처리 05 파일 관련 함수들.
개정판 누구나 즐기는 C언어 콘서트 제12장 파일 입출력 출처: pixabay.
⊙ 입출력 처리란? data를 입력장치로부터 program 내부로 읽어 들이거나
Presentation transcript:

제12장 표준 입출력과 파일 입출력

입출력에 관련된 개념들과 함수들에 대하여 학습한다. 이번 장에서 학습할 내용 입출력에 관련된 개념들과 함수들에 대하여 학습한다. 스트립의 개념 표준 입출력 파일 입출력 입출력 관련 함수

스트림의 개념 스트림(stream): 입력과 출력을 바이트(byte)들의 흐름으로 생각하는 것

스트림과 파일 스트림은 구체적으로 FILE 구조체를 통하여 구현 FILE은 stdio.h에 정의되어 있다.

FILE 구조체

표준 입출력 스트림 표준 입출력 스트림(standard input/output stream): 필수적인 몇 개의 스트림 프로그램 실행 시에 자동으로 만들어지고 프로그램 종료 시에 자동으로 없어진다. 이름 스트림 연결 장치 stdin 표준 입력 스트림 키보드 stdout 표준 출력 스트림 모니터의 화면 stderr 표준 에러 스트림

입출력 함수의 분류 사용하는 스트림에 따른 분류 표준 입출력 스트림을 사용하여 입출력을 하는 함수 스트림을 구체적으로 명시해 주어야 하는 입출력 함수 스트림 형식 표준 스트림 일반 스트림 설명 형식이 없는 입출력(문자 형태) getchar() fgetc(FILE *f,...) 문자 입력 함수 putchar() fputc(FILE *f,...) 문자 출력 함수 gets() fgets(FILE *f,...) 문자열 입력 함수 puts() fputs(FILE *f,...) 문자열 출력 함수 형식이 있는 입출력(정수, 실수,..) printf() fprintf(FILE *f,...) 형식화된 출력 함수 scanf() fscanf(FILE *f,...) 형식화된 입력 함수

입출력 함수의 분류 데이터의 형식에 따른 분류 getchar()나 putchar()처럼 문자 형태의 데이터를 받아들이는 입출력 printf()나 scanf()처럼 구체적인 형식을 지정할 수 있는 입출력 스트림 형식 표준 스트림 일반 스트림 설명 형식이 없는 입출력(문자 형태) getchar() fgetc(FILE *f,...) 문자 입력 함수 putchar() fputc(FILE *f,...) 문자 출력 함수 gets() fgets(FILE *f,...) 문자열 입력 함수 puts() fputs(FILE *f,...) 문자열 출력 함수 형식이 있는 입출력(정수, 실수,..) printf() fprintf(FILE *f,...) 형식화된 출력 함수 scanf() fscanf(FILE *f,...) 형식화된 입력 함수

중간 점검 C에서의 모든 입력과 출력을 ________형식으로 처리된다. 스트림은 모든 입력과 출력을 _________들의 흐름으로 간주한다. 스트림의 최대 장점은 __________이다. 입력을 위한 표준적인 스트림은 _________이고 기본적으로 ______ 장치와 연결된다. 출력을 위한 표준적인 스트림은 _________이고 기본적으로 ______ 장치와 연결된다. 스트림 바이트 장치 독립성 stdin 키보드 stdout 콘솔 화면

printf()를 이용한 출력 int printf(char *format, ...); 형식 제어 문자열의 구조 % 기호 형식 제어 문자열의 시작 플래그(flag) 출력의 정렬과 부호 출력, 공백 문자 출력, 소수점, 8진수와 16진수 접두사 출력 필드폭(width)과 정밀도(precision) 데이터가 출력되는 필드의 크기 정밀도는 소수점 이하 자릿수의 개수가 된다. 크기 [{h | l | L}] 인자를 short int 혹은 unsigned short int 로 생각한다. (오직 i, d, o, u , x, X 서식 문자에만 적용된다) 정수 서식 문자(i,d,o,u,x, X) 에 사용되었을 경우 인자를 long int 나 unsigned long int 로 생각하며 c 나 s 에 사용되었을 경우 wide character 나 wide string 으로 생각한다 인자를 long double 로 생각한다. (오직 부동 소수점 서식 문자인 e,E,f,g, G 에만 적용된다) int printf(char *format, ...); %[플래그] [필드폭] [.정밀도] [{h | l | L}][ 형식]

플래그

필드폭과 정밀도

형식

필드폭

정밀도

과학적 표기법 출력

중간 점검 printf()에서 변수나 수식의 값을 출력하는 형식을 지정하는 문자열은 _______________이다. printf()에서 정렬(alignment)을 구체적으로 지시하지 않으면 기본적으로 ________정렬된다. 실수를 지수 표기법으로 출력하는데 사용되는 형식 지정자는 _______이다. 정수를 필드폭 6으로 출력하려면 %______d로 하여야 한다. 실수를 필드폭 10이고 소수점 이하 자리수를 6자리로 출력하려면 %_______f로 하여야 한다. 출력 값을 왼쪽 정렬시키는 플래그는 ______이다. 실수 출력의 경우, 정밀도를 지정하지 않았을 경우, 소수점 이하 자리수는 기본적으로 ______개가 된다. 형식 제어 문자열 오른쪽 %e 6 10.6 - 6

scanf()를 이용한 입력 문자열 형태의 입력을 사용자가 원하는 형식으로 변환한다.

scanf()의 형식 제어 문자열 * 필드폭 크기 지정 %[*] [필드폭] [{h | l | L}] [형식] 현재 입력을 무시하라는 의미 파일에서 하나의 특정한 열만 읽을 때 유용 필드폭 필드폭 만큼의 문자를 읽어서 값으로 변환 공백 문자로 입력 값을 분리하지 않고서도 여러 개의 값들을 읽을 수 있다. 크기 지정 h가 정수형인 경우, short형으로 변환 h가 float형 앞에 붙으면 double형으로 변환 L은 long double형으로 변환 %[*] [필드폭] [{h | l | L}] [형식]

필드폭 지정하여 읽기

8진수, 16진수 입력

문자와 문자열 입력 분류 형식 지정자 설명 문자형 %c char형으로 입력받음 %s 공백 문자가 아닌 문자부터 공백 문자가 나올 때까지를 문자열로 변환하여 입력받음. %[abc] 대괄호 안에 있는 문자 a,b,c로만 이루어진 문자열을 읽어 들인다. %[^abc] 대괄호 안에 있는 문자 a,b,c만을 제외하고 다른 문자들로 이루어진 문자열을 읽어 들인다. %[0-9] 0에서 9까지의 범위에 있는 문자들로 이루어진 문자열을 읽어 들인다.

문자와 문자열 읽기

scanf6.c 스페이스로 분리된 문자열을 입력하시오:Hello World 입력된 첫번째 문자열=Hello 입력된 문자=

문자집합으로 읽기(1/2) 문자열을 입력하시오:abcdef 입력된 문자열=abc

문자집합으로 읽기(2/2) 문자열을 입력하시오:abcdefghijklmnOPQRSTUVWXYZ

scanf() 사용시 주의점 입력값을 저장할 변수의 주소를 전달 배열의 이름은 배열을 가리키는 포인터 충분한 공간을 확보 int i; scanf("%d", i); // 오류!! 배열의 이름은 배열을 가리키는 포인터 int str[80]; scanf("%s", str); // 올바름 scanf("%s", &str); // 오류!! 충분한 공간을 확보 scanf("%s", str); // 입력된 문자의 개수가 79를 초과하면 치명적인 오류 발생 scanf()의 형식 제어 문자열의 끝에 줄바꿈 문자 '\n'을 사용하는 것은 해당 문자가 반드시 입력되어야 한다는 의미 scanf("%d\n", &i);// 잘못됨!!

중간 점검 scanf()에서 double 값을 입력받을 때 사용하는 형식 지정자는 ________이다. %lf 공백 문자

파일이 필요한 이유

파일의 개념 C에서의 파일은 일련의 연속된 바이트 모든 파일 데이터들은 결국은 바이트로 바뀌어서 파일에 저장 이들 바이트들을 어떻게 해석하느냐는 전적으로 프로그래머의 책임 파일에 4개의 바이트가 들어 있을 때 이것을 int형의 정수 데이터로도 해석할 수 있고 아니면 float형 실수 데이터로도 해석할 수 있다.

텍스트 파일(text file) 텍스트 파일은 사람이 읽을 수 있는 텍스트가 들어 있는 파일 (예) C 프로그램 소스 파일이나 메모장 파일 텍스트 파일은 아스키 코드를 이용하여 저장 텍스트 파일은 연속적인 라인들로 구성

이진 파일(binary file) 이진 파일은 사람이 읽을 수는 없으나 컴퓨터는 읽을 수 있는 파일 이진 데이터가 직접 저장되어 있는 파일 이진 파일은 텍스트 파일과는 달리 라인들로 분리되지 않는다. 모든 데이터들은 문자열로 변환되지 않고 입출력 이진 파일은 특정 프로그램에 의해서만 판독이 가능 (예) C 프로그램 실행 파일, 사운드 파일, 이미지 파일

파일 처리의 개요 파일을 다룰 때는 반드시 다음과 같은 순서를 지켜야 한다. 디스크 파일은 FILE 구조체를 이용하여 접근 FILE 구조체를 가리키는 포인터를 파일 포인터(file pointer)

파일 열기 파일에서 데이터를 읽거나 쓸 수 있도록 모든 준비를 마치는 것 첫 번째 매개 변수인 name은 파일의 이름 두 번째 매개 변수인 mode는 파일을 여는 모드를 의미

파일 모드 모드 설명 “r” 읽기 모드로 파일을 연다. “w” 쓰기 모드로 파일을 생성한다. 만약 파일이 존재하지 않으면 파일이 생성된다. 파일이 이미 존재하면 기존의 내용이 지워진다. “a“ 추가 모드로 파일을 연다. 만약 똑같은 이름의 기존의 파일이 있으면 데이터가 파일의 끝에 추가된다. 파일이 없으면 새로운 파일을 만든다. “r+” 읽기와 쓰기 모드로 파일을 연다. 파일이 반드시 존재하여야 한다. “w+” 읽기와 쓰기 모드로 파일을 생성한다. 만약 파일이 존재하지 않으면 파일이 생성된다. 파일이 존재하면 새 데이터가 기존 파일의 데이터를 덮어 쓰게 된다. “a+” 읽기와 추가 모드로 파일을 연다. 만약 똑같은 이름의 기존의 파일이 있으면 데이터가 파일의 끝에 추가된다. 읽기는 어떤 위치에서나 가능하다. 파일이 없으면 새로운 파일을 만든다. “b” 이진 파일 모드로 파일을 연다.

파일 모드

file_open.c 파일 열기 성공

파일 닫기와 삭제 파일을 닫는 함수 파일을 삭제하는 함수

중간 점검 파일은 일련의 연속된 ________라고 생각할 수 있다. 파일에는 사람이 읽을 수 있는 텍스트가 들어 있는 _______파일과 사람은 읽을 수 없으나 컴퓨터는 읽을 수 있는 ______파일이 있다. 파일을 여는 라이브러리 함수는 _________이다. fopen()은 ________을 가리키는 포인터를 반환한다. 바이트 텍스트 이진 fopen() FILE

크게 나누면 텍스트 입출력 함수와 이진 데이터 입출력으로 나눌 수 있습니다. 파일 입출력 함수 파일 입출력 라이브러리 함수 종류 설명 입력 함수 출력 함수 문자 단위 문자 단위로 입출력 int fgetc(FILE *fp) int fputc(int c, FILE *fp) 문자열 단위 문자열 단위로 입출력 char *fgets(FILE *fp) int fputs(const char *s, FILE *fp) 서식화된 입출력 형식 지정 입출력 int fscanf(FILE *fp, ...) int fprintf(FILE *fp,...) 이진 데이터 이진 데이터 입출력 fread() fwrite() 크게 나누면 텍스트 입출력 함수와 이진 데이터 입출력으로 나눌 수 있습니다.

문자 단위 입출력 문자 입출력 함수 문자열 입출력 함수 F I L E FILE INPUT 파일 포인터 int fgetc( FILE *fp ); int fputc( int c, FILE *fp ); F I L E 문자열의 크기 char *fgets( char *s, int n, FILE *fp ); int fputs( char *s, FILE *fp ); FILE INPUT

문자 단위 입출력   sample.txt abc 파일 열기 성공

문자 단위 입출력   sample.txt abc 파일 열기 성공 abc

문자열 단위 입출력

문자열 단위 입출력 원본 파일 이름: a.txt 복사 파일 이름: b.txt

예제 proverb.txt A chain is only as strong as its weakest link A change is as good as a rest A fool and his money are soon parted A friend in need is a friend indeed A good beginning makes a good ending A little knowledge is a dangerous thing …

예제 입력 파일 이름을 입력하시오: proverb.txt 탐색할 단어를 입력하시오: house

%d와 같은 특정한 형식을 지정하여 파일에 출력할 수 있습니다. 형식화된 출력 %d와 같은 특정한 형식을 지정하여 파일에 출력할 수 있습니다.

%d와 같은 특정한 형식을 지정하여 파일에 입력할 수 있습니다. 형식화된 입력 %d와 같은 특정한 형식을 지정하여 파일에 입력할 수 있습니다.

예제

예제

예제 성적 파일 이름을 입력하시오: score.txt 학번, 이름, 성적을 입력하시요: (음수이면 종료) 1 KIM 90.2 학번, 이름, 성적을 입력하시요: (음수이면 종료) 2 PARK 30.5 학번, 이름, 성적을 입력하시요: (음수이면 종료) 3 MIN 56.8 학번, 이름, 성적을 입력하시요: (음수이면 종료)-1 평균 = 58.575001

중간 점검 fgetc()의 반환형은 _______형이다. 파일에서 하나의 라인을 읽어서 반환하는 함수는 _______이다. 텍스트 파일에 실수나 정수를 문자열로 변경하여 저장할 때 사용하는 함수는 ________이다. 텍스트 파일에서 실수나 정수를 읽는 함수는 ________이다. int fgets() fprintf() fscanf()

이진 파일 쓰기와 읽기 텍스트 파일과 이진 파일의 차이점 텍스트 파일: 모든 데이터가 아스키 코드로 변환되어서 저장됨 이진 파일: 컴퓨터에서 데이터를 표현하는 방식 그대로 저장

이진 파일의 생성 파일 모드 설명 “rb" 읽기 모드 + 이진 파일 모드 “wb" 쓰기 모드 + 이진 파일 모드 “ab" 추가 모드 + 이진 파일 모드 “rb+" 읽고 쓰기 모드 + 이진 파일 모드 "wb+" 쓰고 읽기 모드 + 이진 파일 모드

이진 파일 쓰기 size_t fwrite( void *buffer, size_t size, size_t count, FILE *fp);

이진 파일 쓰기

이진 파일 읽기

버퍼링 fopen()을 사용하여 파일을 열면, 버퍼가 자동으로 만들어진다. 버퍼는 파일로부터 읽고 쓰는 데이터의 임시 저장 장소로 이용되는 메모리의 블록 디스크 드라이브는 블록 단위 장치이기 때문에 블록 단위로 입출력을 해야만 가장 효율적으로 동작 1024바이트의 블록이 일반적 파일과 연결된 버퍼는 파일과 물리적인 디스크 사이의 인터페이스로 사용 파일 디스크 버퍼

예제

예제 학번 = 1, 이름 = Kim, 평점 = 3.990000 학번 = 2, 이름 = Min, 평점 = 2.680000 학번 = 3, 이름 = Lee, 평점 = 4.010000

임의 접근 파일 순차 접근(sequential access) 방법: 데이터를 파일의 처음부터 순차적으로 읽거나 기록하는 방법 임의 접근(random access) 방법: 파일의 어느 위치에서든지 읽기와 쓰기가 가능한 방법

임의 접근 파일의 원리 파일 위치 표시자: 읽기와 쓰기 동작이 현재 어떤 위치에서 이루어지는 지를 나타낸다. 강제적으로 파일 위치 표시자를 이동시키면 임의 접근이 가능 파일 위치 표시자

임의 접근 관련 함수 int fseek(FILE *fp, long offset, int origin); 상수 값 설명 SEEK_SET 파일의 시작 SEEK_CUR 1 현재 위치 SEEK_END 2 파일의 끝 fseek(fp, 0L, SEEK_SET); // 파일의 처음으로 이동 fseek(fp, 0L, SEEK_END); // 파일의 끝으로 이동 fseek(fp, 100L, SEEK_SET); // 파일의 처음에서 100바이트 이동 fseek(fp, 50L, SEEK_CUR); // 현재 위치에서 50바이트 이동 fseek(fp, -20L, SEEK_END); // 파일의 끝에서 20바이트 앞으로 이동 fseek(fp, sizeof(struct element), SEEK_SET); // 구조체만큼 앞으로 이동

파일 위치 표시자를 초기화하고 현재 위치를 알아내는 함수들입니다. 임의 접근 관련 함수 void rewind(FILE *fp); 파일 위치 표시자를 0으로 초기화 long ftell(FILE *fp); 파일 위치 표시자의 현재 위치를 반환 파일 위치 표시자를 초기화하고 현재 위치를 알아내는 함수들입니다.

예제

예제

예제 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): 3 3 위치의 값은 9입니다. 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): 9 9 위치의 값은 81입니다. 파일에서의 위치를 입력하십시요(0에서 999, 종료 -1): -1

중간 점검 파일의 처음부터 순차적으로 읽거나 쓰는 방법을 ________이라고 한다. 파일의 어느 위치에서나 읽고 쓰기가 가능한 방법을 ________이라고 한다. 파일에서 읽기나 쓰기가 수행되면 파일의 현재의 위치를 표시하는 _______________가 갱신된다. 파일의 위치 표시자를 알아내는 함수는 _______이다. 순차접근 임의접근 파일 위치 표시자 ftell()

Q & A