본문 바로가기

고급C,C++

C언어 파일 입출력 고려할것

FILE *fp;

fp -------------------> _ptr   : 현재 가리키고 있는 byte
                                   _cnt  : 남은 바이트수(_cnt로는 EOF을 알수 없음 buffersize의 남은 byte수)
                                   _base : buffer의 첫 byte
                                   _flag : 파일의 현 상태를 나타냄
                                   _file  : fd 번호(파일디스크립터)


EOF는 무슨근거로??
 -> 시스템에서 파일의 크기를 알 수 있다. 파일에서 -1값을 잃어 온 것이 아니라 시스템파일의 끝을 탐지해내서  -1을 받아온 것이다.

int ch;
while((ch = fgetc(fp)) != EOF)
{


}
여기서 ch가 int형인 이유가 있다. text파일에는 상관이 없지만 바이너리 파일을 이용할 때는 0xff 패턴이 있다. char형으로는 0xff는 -1이다. EOF도 -1이므로 EOF가 된다.
int형 이어야만 0xff와 -1을 구분할 수 있다.



//간단한 파일 출력
char buffer[4096];
int ret;
while((ret = fread(buffer, sizeof char, sizeof buffer, fp))!=0)
{
      //buffer[ret] = 0;
      //printf("%s",buffer);
      fwrite(buffer, 1, ret, stdout);
}


fopen("a,c", "r"); 에서 r과 rb와의 차이점 (r 은rt에서 t가 생략된것임)

"hello\r\n" 파일에 이렇게 저장됨 r로 오픈 하면 \r을 빼고 읽음 그리고 \n을 입력하면 \r을 만들어줌(\r 넣고 뺌을 text모드에서 지원이 됨)
"wb", "rb"로 열면(파일대 파일 copy할때 이렇게 열어야함) 파일에 있는 그대로 읽고 씀



//더 추가할 내용이 있음