C에서 파일끝을 어떤식으로판별하는지요? (ps. EOF의 개념이..)

kimoppp의 이미지

파일을 읽어올때면 당연히 EOF를 쓰긴 했는데요 while(fgetc(FILE)!= EOF) 대충이런식으로

막상 어떤식으로 판별되는지 개념없이 쓰고 있어서 질문드려요

파일에끝에 항상 EOF or -1이 들어가 있는것은 아닐테구요 (바이너리파일기준으로) ,, 예전에는 항상 삽입했다는 소리가 있지만..

맨위의 코드를 보면 한문자씩읽어와서 EOF를 만나면 끝나야하니깐 파일 끝에 EOF가 있는것 같기도 하고..

이거원 개념이 안잡히네요

찾아보니 파일사이즈로 한다는 말이 있던데 정확히 어떤식으로 작동하고 파일끝을 인식하는지

아시는분 공유부탁해요~

eungkyu의 이미지

C언어에서 EOF는 글자를 말하는 것이 아니고 그냥 상수 값일 뿐입니다.
fgetc에서 평상시에는 한 글자를 리턴하다가 파일의 끝에 다다르면 글자 대신 EOF라는 값을 리턴하는 것 뿐입니다.

바이너리 모드와 텍스트 모드와도 관련이 없을 겁니다.

bushi의 이미지

MS사는 0x1A 를 end-of-file 로 인정하자고 주장했습니다. (ASCII 코드 26번, ctrl+z 로 입력되는 ^Z )
단, 텍스트 파일로써 처리할 때만. type 명령이 대표적입니다(*nix 의 cat 명령과 유사한).

ASCII 코드 3번, ETX(end-of-text) 가 있음에도 다른 코드를 찾은 것은 ctrl+c 와 쫑이나기 때문이겠죠.

지금도 파일을 텍스트로써 처리할 때 0x1A 를 EOF 문자로 처리하는 지는 잘 모르겠지만,
잔재는 남아있습니다.
*nix 에선

$ cat > abc
아아아 test
^D
$

처럼 ASCII 4번, EOT(end-of-transmission) 을 사용해서 터미네이션을 하지만 MS 에선
> type > abc
아아아 test
^Z
>

처럼 여전히 26번을 사용합니다. (예전엔 실제 파일에도 ^Z가 삽입됐었는데 지금은 모르겠습니다)

아무튼, end-of-file 에 해당하는 코드는 ASCII 에 없습니다.
http://www.papuaweb.org/info/tek/ascii-000-127.gif

'예전엔 있었다', '텍스트 바이너리에 따라 틀리다'
라는 소문은 위에 말씀드린 MS 의 ^Z 에 대한 것이라 생각합니다.

OTL

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.