• 검색 결과가 없습니다.

[2011 06 09].Part3 Ch3.콘솔입출력과파일입출력

N/A
N/A
Protected

Academic year: 2021

Share "[2011 06 09].Part3 Ch3.콘솔입출력과파일입출력"

Copied!
31
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

컴퓨터공학실습 1

Part 3

Ch3. 콘솔 입출력과 파일 입출력

(2)

목차

스트림과 버퍼

콘솔 표준 입출력과 콘솔 비표준 입출력

파일 입출력 과정

(3)

스트림과 버퍼

스트림 (Stream)

데이터를 입력하거나 출력하기 위한 다리

(4)

스트림과 버퍼

표준 입출력 스트림

(5)

스트림과 버퍼

버퍼 (Buffer)

처리할 데이터를 임시로 저장하는 장소

데이터 생성 속도와 데이터 처리 속도의 차이를 보완

입력 버퍼 : 입력 데이터를 임시 저장

출력 버퍼 : 출력 데이터를 임시 저장

(6)

스트림과 버퍼

버퍼를 통한 입출력

(7)

콘솔 표준 입출력과 콘솔 비표준 입출력

콘솔 (Console)

키보드나 모니터와 같은 표준 입출력 장치

콘솔 입출력

(8)

콘솔 표준 입출력과 콘솔 비표준 입출력

콘솔 표준 입출력 함수

헤더 파일 :

stdio.h

함수의 원형

기능

헤더파일

int

getchar

(void);

키보드

로 부터 한

문자

입력

받는다

.

stdio.h

int

putchar

(int c);

모니터

에 한

문자

출력

한다 .

stdio.h

char*

gets

(char *s);

키보드

로 부터

문자열

입력

받는다

.

stdio.h

int

puts

(char* str);

모니터

문자열

출력

한다 .

stdio.h

int

scanf

(const char* format, …);

키보드

로 부터

데이터

서식

에 맞춰

출력

한다 .

stdio.h

int

printf

(const char* format, …);

모니터

데이터

(9)

콘솔 표준 입출력과 콘솔 비표준 입출력

콘솔 비표준 입출력 함수

헤더 파일 :

conio.h

버퍼를 사용하지 않음

함수의 원형

기능

헤더파일

int

getch

(void);

키보드

로 부터 한

문자

입력

받는다 .

(

입력 화면에 입력 문자가 보이지 않는다 .)

conio.h

int

getche

(int c);

키보드

로 부터 한

문자

입력

받는다 .

(

입력 화면에 입력 문자가 보인다 .)

conio.h

int

putch

(int c);

모니터

에 한

문자

출력

한다 .

conio.h

int

kbhit

(void);

키보드상에 있는

눌려졌는지를 조사

.

한다

(10)

콘솔 표준 입출력과 콘솔 비표준 입출력

#include<stdio.h>

int main(void)

{

char ch=0;

while( ch != EOF) // EOF == -1

{

ch=getchar();

putchar(ch);

}

 

return 0;

}

#include

<stdio.h>

int

main(

void

)

{

char

ch=0;

while

( ch != EOF)

// EOF == -1

{

ch=getchar();

putchar(ch);

}

 

return

0;

}

(11)

파일 입출력 과정

파일 (file) 입출력의 필요성

프로그램이 사용하는 데이터를 일정한 형식에 따라 디스크에

저장함으로써 필요할 때 데이터 입출력이 가능

파일의 종류

텍스트 (text) 파일 :

텍스트 정보를 저장하고 있는 파일 (*.txt, *c, *.hwp, *.doc)

바이너리 (binary) 파일

(12)
(13)

표준 파일 입출력 함수

파일 열기 / 닫기

(14)

표준 파일 입출력 함수

파일 스트림

파일 데이터를 입력 받거나 출력할 수 있는 스트림

파일 구조체 포인터

파일 데이터에 접근하는 데 사용되는 FILE 구조체 포인터

파일 스트림의 실체에 해당

fopen() 함수

파일 스트림을 생성하는 것과 동시에 파일 여는 동작 수행

파일 스트림 반환

(15)

표준 파일 입출력 함수

파일 접근 모드

모드

설명

r

읽기 전용

으로 파일을 연다 .

파일이 없거나 찾을 수 없는 경우

에 호출

실패

w

쓰기 전용

-

지정한 파일명이 있는 경우 :

으로 파일을 연다 .

파일 내용을 모두 지우고 새로 만든다 .

-

지정한 파일명이 없는 경우 :

새로운 파일을 생성 한다 .

a

추가 쓰기 전용

-

지정한 파일이 있으면

으로 파일을 열다 .

파일의 끝에서부터 내용을 추가

합니다 .

r+

파일을 읽고 쓰기

-

지정한 파일이 있는 경우 :

위해 연다 .

기존의 내용을 덮어쓴다 .

-

지정한 파일이 없는 경우 :

새로운 파일을 생성

해서 데이터를 쓴다 .

w

+

파일을 읽고 쓰기

위해 연다 .

-

지정한 파일이 있는 경우 :

파일의 내용을 모두 지우고

새 파일을 만든다 .

-

지정한 파일이 없는 경우 :

새로운 파일을 생성 한다 .

a+

파일을 읽고 추가 쓰기

-

지정한 파일이 있으면 파일의 끝에서부터 내용을 추가한다 .

위해 연다 .

(16)

표준 파일 입출력 함수

파일 입출력 모드

파일 접근 모드 , 파일 입출력 모드의 조합에 의해 파일 데

이터에 접근

모드

설명

t

텍스트 파일 모드 (

생략 가능 )

b

바이너리 파일 모드

(17)

표준 파일 입출력 함수

#include<stdio.h>

int main(void)

{

FILE* stream; //

파일 스트림 생성을 위한 FILE 포인터 선언

int file_state; //

파일의 종료를 위한 상태 체크 변수 선언

 

//

파일 스트림 생성과 파일 열기

stream = fopen("data1.txt","w");

if (stream == NULL)

printf("

파일 열기 에러 \n");

 

//

파일 닫기 ( 파일 스트림 소멸 )

file_state = fclose(stream);

if (file_state == EOF)

puts("

파일 닫기 에러 ");

return 0;

}

#include<stdio.h>

int main(void)

{

FILE* stream; //

파일 스트림 생성을 위한 FILE 포인터 선언

int file_state; //

파일의 종료를 위한 상태 체크 변수 선언

 

//

파일 스트림 생성과 파일 열기

stream = fopen("data1.txt","w");

if (stream == NULL)

printf("

파일 열기 에러 \n");

 

//

파일 닫기 ( 파일 스트림 소멸 )

file_state = fclose(stream);

if (file_state == EOF)

puts("

파일 닫기 에러 ");

return 0;

}

(18)

표준 파일 입출력 함수

파일 데이터 입출력

(19)

표준 파일 입출력 함수

파일 데이터 입출력

(20)

표준 파일 입출력 함수

파일 데이터 입출력

(21)

표준 파일 입출력 함수

#include<stdio.h>

int main(void)

{

FILE* stream1;

FILE* stream2;

 

char name[10]="";

int kor=0, eng=0, total=0;

 

stream1 = fopen("data4.txt","r");

stream2 = fopen("data5.txt","w");

fscanf(stream1,"%s %d %d %d \n", name, &kor, &eng, &total);

fprintf(stream2,"%s %d %d %d \n", name, kor, eng, total);

// fprintf(stdout, "%s %d %d %d \n", name, kor, eng, total);

 

fclose(stream1);

fclose(stream2);

return 0;

#include<stdio.h>

int main(void)

{

FILE* stream1;

FILE* stream2;

 

char name[10]="";

int kor=0, eng=0, total=0;

 

stream1 = fopen("data4.txt","r");

stream2 = fopen("data5.txt","w");

fscanf(

stream1

,"%s %d %d %d \n", name, &kor, &eng, &total);

fprintf(

stream2

,"%s %d %d %d \n", name, kor, eng, total);

// fprintf(stdout, "%s %d %d %d \n", name, kor, eng, total);

 

fclose(stream1);

fclose(stream2);

(22)

표준 파일 입출력 함수

파일의 끝 검사 , 버퍼 비우기

헤더 파일 :

stdio.h

함수 원형

설명

int feof(FILE*

stream);

파일의 끝에 도달했는지 아닌지를 검사

파일의 끝에 도달 : 0

이 아닌 값 반환

파일의 끝에 도달하지 못한 경우 : 0 반환

함수 원형

설명

int fflush(FILE* stream);

버퍼를 비움

(23)

표준 파일 입출력 함수

바이너리 파일 입출력 - fread() 함수

헤더 파일 :

stdio.h

buffer: 파일로부터 입력 받는 데이터를 저장할 버퍼

size: 한 번에 입력 받을 데이터의 바이트 수

count: 데이터를 입력 받을 횟수

stream: 파일 입력 스트림

(24)

표준 파일 입출력 함수

바이너리 파일 입출력 – fwrite() 함수

헤더 파일 :

stdio.h

buffer: 파일에 출력하는 데이터를 저장할 버퍼

size: 한 번에 출력할 데이터의 바이트 수

count: 데이터를 출력할 횟수

stream: 파일 출력 스트림

(25)

표준 파일 입출력 함수

#include<stdio.h>

int main(void)

{

int buffer1[5] = {0xff, 0x56, 0x78, 0xfa, 0xf1};

int buffer2[5];

 

FILE* stream;

stream = fopen("student.dat","wb"); //

바이너리 모드 , 쓰기 모드

fwrite(buffer1,sizeof(int),5,stream);

fclose(stream);

 

stream = fopen("student.dat","rb"); //

바이너리 모드 , 읽기 모드

fread(buffer2,sizeof(int),5,stream);

printf("%x %x %x %x %x \n", buffer2[0], buffer2[1], buffer2[2], buffer2[3],

buffer2[4]);

fclose(stream);

  return 0;

}

#include<stdio.h>

int main(void)

{

int buffer1[5] = {0xff, 0x56, 0x78, 0xfa, 0xf1};

int buffer2[5];

 

FILE* stream;

stream = fopen("student.dat","wb"); //

바이너리 모드 , 쓰기 모드

fwrite(buffer1,sizeof(int),5,stream);

fclose(stream);

 

stream = fopen("student.dat","rb"); //

바이너리 모드 , 읽기 모드

fread(buffer2,sizeof(int),5,stream);

printf("%x %x %x %x %x \n", buffer2[0], buffer2[1], buffer2[2], buffer2[3],

buffer2[4]);

fclose(stream);

  return 0;

}

(26)

표준 파일 입출력 함수

파일 랜덤 접근

헤더 파일 :

stdio.h

함수 원형

설명

int fseek(FILE* stream, long offset, int

start

);

start

부터 offset

까지 스트림

이동시킨다 .

성공 : 0 반환

실패 : 0

이 아닌 값 반환

(27)
(28)

표준 파일 입출력 함수

(29)
(30)

표준 파일 입출력 함수

파일 랜덤 접근

함수 원형

설명

long ftell(FILE* stream);

파일 포인터 stream

성공 :

파일 포인터의 위치 반환

의 위치를 확인

실패 : EOF 반환

(31)

표준 파일 입출력 함수

#include<stdio.h>

int main(void)

{

FILE* stream = fopen("ftell.txt", "rb");

fseek(stream, 0, SEEK_END);

printf("ftell.txt

파일의 크기 : %d 바이트 \n", ftell(stream));

fclose(stream);

 

return 0;

}

#include<stdio.h>

int main(void)

{

FILE* stream = fopen("ftell.txt", "rb");

fseek(stream, 0, SEEK_END);

printf("ftell.txt

파일의 크기 : %d 바이트 \n",

ftell(stream)

);

fclose(stream);

 

return 0;

}

참조

관련 문서

setf와 unsetf 멤버 함수를 이용한 입출력 형식 지정 setf 이외의 멤버 함수를 이용한 입출력 형식 지정 입출력 조작자를 이용한 입출력 형식 지정.. 사용자

특정 네임스페이스에 포함되어 있는 식별자를 전역 네임스페이스(또 는 다른 네임스페이스)에 있는 것처럼 사용하는 방법.

입출력 인터페이스, 입출력 채널(channel), 입출력 프로세서, 입출력 제어기 (controller), 장치 제어기(device controller) 등의 여러 가지

비판적 역사 쓰기.. 대한민국 임시정부에 대한 텍스트를 학생들이 보고 글을 썼을 때. ▪ 교과서를 읽고 글을

※ 진행상태의 성공은 전자신고 파일 여부만 확인하므로 전자신고파일이 맞아도 파일이 내부적으로 깨졌을 경우 조회되지 않음.. 성공이 아닌 실패로 뜬다면 파일

 새로운 드라이브를 선택하거나 디렉토리를 표시하거나 파일의 목 록을 보기 위해 파일 시스템 컨트롤을 사용.  파일 시스템 컨트롤은 기본 컨트롤으로

이 학생들의 숙제1, 숙제2, 숙제3의 성적을 가상으로 만들어서 exam.txt 파일에 아래와

• 모든 자바 입출력 클래스는 궁극적으로 바이트단위 입출력 을