C에서 파일끝을 어떤식으로판별하는지요? (ps. EOF의 개념이..)
글쓴이: kimoppp / 작성시간: 금, 2009/01/16 - 1:23오후
파일을 읽어올때면 당연히 EOF를 쓰긴 했는데요 while(fgetc(FILE)!= EOF) 대충이런식으로
막상 어떤식으로 판별되는지 개념없이 쓰고 있어서 질문드려요
파일에끝에 항상 EOF or -1이 들어가 있는것은 아닐테구요 (바이너리파일기준으로) ,, 예전에는 항상 삽입했다는 소리가 있지만..
맨위의 코드를 보면 한문자씩읽어와서 EOF를 만나면 끝나야하니깐 파일 끝에 EOF가 있는것 같기도 하고..
이거원 개념이 안잡히네요
찾아보니 파일사이즈로 한다는 말이 있던데 정확히 어떤식으로 작동하고 파일끝을 인식하는지
아시는분 공유부탁해요~
Forums:
C언어에서 EOF는
C언어에서 EOF는 글자를 말하는 것이 아니고 그냥 상수 값일 뿐입니다.
fgetc에서 평상시에는 한 글자를 리턴하다가 파일의 끝에 다다르면 글자 대신 EOF라는 값을 리턴하는 것 뿐입니다.
바이너리 모드와 텍스트 모드와도 관련이 없을 겁니다.
MS사는 0x1A 를
MS사는 0x1A 를 end-of-file 로 인정하자고 주장했습니다. (ASCII 코드 26번, ctrl+z 로 입력되는 ^Z )
단, 텍스트 파일로써 처리할 때만. type 명령이 대표적입니다(*nix 의 cat 명령과 유사한).
ASCII 코드 3번, ETX(end-of-text) 가 있음에도 다른 코드를 찾은 것은 ctrl+c 와 쫑이나기 때문이겠죠.
지금도 파일을 텍스트로써 처리할 때 0x1A 를 EOF 문자로 처리하는 지는 잘 모르겠지만,
잔재는 남아있습니다.
*nix 에선
처럼 ASCII 4번, EOT(end-of-transmission) 을 사용해서 터미네이션을 하지만 MS 에선
처럼 여전히 26번을 사용합니다. (예전엔 실제 파일에도 ^Z가 삽입됐었는데 지금은 모르겠습니다)
아무튼, end-of-file 에 해당하는 코드는 ASCII 에 없습니다.
http://www.papuaweb.org/info/tek/ascii-000-127.gif
'예전엔 있었다', '텍스트 바이너리에 따라 틀리다'
라는 소문은 위에 말씀드린 MS 의 ^Z 에 대한 것이라 생각합니다.
OTL
댓글 달기