#include<stdio.h>

main()
{
       int state;
       /* 파일의 개방 */
       FILE * file = fopen("c:\\Jeon.txt", "wt"); //fopen함수는 인자로 파일의 접근모드와 개방모드를 가진다.
       if(file==NULL)                                        //리턴값은 구조체변수 포인터이다. 오류발생시 NULL포인터 리턴.
       {
              printf("file error! \n");
              return 1;
       }

       /* 파일의 종결 */
       state = fclose(file); //fclose함수는 인자로 구조체변수 포인터를 가진다.
       if(state != 0)           //리턴값은 int형이고 오류발생시 0이 아닌 값이 리턴됨.
       {
              printf("file close error!");
              return 1;
       }

       return 0;
}

파일의 개방 == 스트림 생성


                            - fopen 함수 -
FILE * file fopen(const char * filename, const char * mode)
성공 시 해당 파일의 파일포인터, 실패 시 NULL 포인터 리턴

fopen함수의 인자 접근 모드, 개방 모드

◆ 접근 모드 : 파일이 있는 곳을 말함. 접근할 수 있는 곳. 파일의 경로와 파일명!! 위에 \\를 두번 쓴 이유는 
\를 표현하기 위하여 \를 두번 썼다. 읽어들인땐 이렇다. c:\Jeon.txt

◆ 개방 모드 : 개방 모드는 파일 접근 모드+데이터 입력, 출력 모드를 말한다.
└ 파일 접근 모드 : 개방한 파일의 사용 용도를 결정짓는다.
read, write, append 파일을 읽을 것인지, 쓸 것인지, 추가할 것인지!!
(r, w, a, r+, w+, a+) 총 6가지가 있다. +붙은 것은 모두 입력, 출력을 할 수 있지만 버퍼를 계속 비워야 한다는 점
때문에 잘 쓰지 않는다. 하지만 쓰긴쓴다.!!

└ 데이터 입력, 출력 모드 : 데이터를 입력 혹은 출력하는 방식을 의미한다.
두 가지가 있는데 't' 와 'b' 이다. t는 텍스트 모드(text mode)이고, b는 2진 모드(binary mode)이다.
*텍스트 모드란 데이터 변환이 일어나는 입.출력 모드를 의미. (문자열과 같은 텍스트 기반의 데이터에 쓰는 것이 좋음)
*2진 모드란 아무런 데이터의 변환도 일으키지 않는 입.출력 모드를 의미. (영상이나 음성 데이터 입.출력에 쓰임)


fopen함수의 리턴타입

리턴 값은 FILE 구조체 변수의 포인터이다.(파일 포인터)
FILE 구조체 변수는 개방한 파일에 대한 여러 가지 정보를 지니는 변수이다.
(개방한 파일이 무엇인지, 파일 내에 존재하는 데이터를 어디까지 읽어들였는지, 파일의 끝에 도달했는지)




파일의 종결

                             - fclose 함수 -
int fclose(FILE * stream)
종료가 오류 없이 제대로 이뤄지면 0을 리턴.

파일의 정보를 지니는 FILE 구조체 변수의 포인터를 전달하면 해당 파일이 닫힌다. 즉 해당 스트림이 소멸된다.
스트림의 소멸이 제대로 이뤄지면 0을 리턴하므로, 이 결과를 통해서 오류의 유.무를 확인할 수 있다.

파일을 개방하였으면 파일을 꼭 닫아주어야 한다. 왜냐면, 프로그램이 종료되기 전에 예측지 못한 오류가 발생하면 데이터의
손실이 발생할 수 있기 때문이다.
*프로그램상에서 파일을 개방한 후에 파일의 사용이 끝나면 바로 닫아주는 것이 좋은 습관이다.

Posted by scii
: