스트림
- 일련의 문자열. 정확하게 말하면 일련의 바이트로 구성되는 데이터이다. 여기서 프로그램으로 전달되는 바이티는 입력 스트림이다. 프로그램에서 외부로 이동되는 바이트는 출력스트림이다. 스트림의 한가지 장점은 프로그램의 입출력 동작이 장치에 독립적인 상태로 수행된다는 것이다. 프로그래머는 키보드, 디스크 등 각각의 장치를 위한 특별한 입출력 함수를 작성할 필요가 없다.
 
- 텍스트 스트림 : 화면에 출력되는 텍스트 데이터와 같은 문자만으로 구성, 255자까지의 길이, 마지막을 나타내는 문자 EOF 나
                       새로운 줄문자에 의해서 종료
- 바이너리 스트림 : 모든 종류의 데이터를 다룰 수 있다. 디스크파일에 기본적으로 사용
 
#include <stdio.h>
#include <stdlib.h>
void clear_kb(void);
main()
{
    FILE *fp;  // fopen의 반환형이 FILE 형
    char filename[40]; 
    int data[5];
    int count;
 
    puts("Enter 5 number");
    for(count=0;count<5;count++)
         scanf("%d",&data[count]);      // data 배열에 5개의 int형 값을 입력 받는다
 
    clear_kb();
    puts("Enter filename");    //출력
    gets(filename);              //입력
 
 
/*
원형  FILE *fopen(const char *filename, const char *mode); 이다
첫번째 인자가 포인터형이라서 위에서 filename선언시 배열로 해주었다
포인터와 배열은 거의 똑같다고 할수있는데..말로 설명할려니 내공부족이다 ㅠ_ㅠ
두번째 인자 mode는 파일스트림을 열때 어떤형식으로 여는가를 결정해준다
r - 읽기상태로 연다. 지정된 이름의 파일이 존재하지 않으면 NULL을 돌려준다
w - 쓰기상태로 연다. 지정된 이름의 파일이 존재하지 않으면 생성된다. 존재하면 경고없이 삭제되고 새롭게 파일생성
a - 데이터추가상태로 연다. 지정된 이름의 파일이 존재하지 않으면 생성된다. 존재한다면 데이터는 파일의 마지막에 추가
r+ - 읽기와 쓰기상태로 연다. 지정된 이름의 파일이 존재하지 않으면 생성된다. 존재한다면 새로운 데이터는 파일의 시작부분에서 이전의 데이터를 덮어쓰게 된다.
w+ - 읽기와 쓰기상태로 연다. 지정된 이름의 파일이 존재하지 않으면 생성된다. 존재한다면 이전의 데이터는 덮어쓰게 된다
a+ - 읽기와 데이터추가상태로 연다. 지정된 이름의 파일이 존재하지 않으면 생성된다. 존재한다면 새로운 데이터는 파일의 마지막에 추가된다.
*/
 
    if((fp=fopen(filename,"w"))==NULL)  
    {
         fprintf(stderr, "Error %s",filename);
         exit(1);
    }
 
/* 5개의 표준스트림
stdin 표준입력(키보드), stdout 표준출력(화면), stderr 표준에러 (화면), stdprm* 표준프린터(프린터), stdaux* 표준보조 (직렬포트)
 
    for(count=0;count<5;count++)
    {
         fprintf(fp,"ndata[%d]=%d",count,data[count]);   //파일 출력을 fp 즉 FILE포인터로 데이터를 쓴다
         fprintf(stdout,"ndata[%d]=%d",count,data[count]);    // 파일출력을 디스플레이 해준다
    }
    fclose(fp);   // FILE 포인터를 열었으면 항상 닫아준다
    return(0);
}
 
 
void clear_kb(void)
{
    char junk[80];
    gets(junk);
}
입력동작을 수행하기 전에 stdin에 문자가남아 있지 않도록 하기위해
문장의 마지막을 뜻하는 문자까지 모든 내용을 읽어들이는 gets()함수 호출
fflush(stdin) 함수 이용하여 특정 스트림에서 데이터를 지운다
Posted by 용학도리
,