파일의 끝은 어떻게 아나요?

keedi의 이미지

안녕하세요.
이미 날이 밝아 버렸으니 저도 아침형 인간이로군요... 후훗... :=)

공부를 하다가 문득 리눅스에서는(비단 리눅스 뿐만은 아니겠지만...) 파일에는
데이터만 저장하고 그 파일에 대한 정보... 즉 메타 데이터는 i-node에 저장
한다는 부분을 읽게 되었습니다.

씨 언어에서 파일의 끝인지 체크하는 함수 feof()의 경우에 파일 자체는 자료
만을 지니고 있다면 현재 파일의 끝인지는 어떻게 아는지요. 파일 자체로
아는 것이 아니라 i-node 부분을 참조해서 알게 되는것인가요?

feof()와 같은 파일의 끝을 체크해서 결과 값을 사용자에게 돌려주는 함수들의
동작 방식이 궁금합니다.

Necromancer의 이미지

stat(), fstat()하면 파일 크기 나옵니다.

그리고 파일 끝에 도달하면 read()하면 읽어들인 바이트수가 없습니다.

lseek() 등등을 쓰면 현재 파일에서 읽고 쓸 작업위치 돌려줍니다.

파일관련 C 표준 라이브러리는 내부적으로는 이들을 이용합니다.

Written By the Black Knight of Destruction

소타의 이미지

-_-;;;;
파일시스템 마다 다를테지만 ext2의 경우 i-node에는 이 파일이 몇개의 블록을 사용하고 있는지와 블록들의 물리적인 주소를 배열로 가지게 됩니다. 파일의 크기도 역시 기억하고 있고요.
feof를 구현하는 방법은
({슈퍼블록에 명시된 한 블록의 크기} * {i-node에 명시된 블록 배열의 크기}) - {i-node에 명시된 파일 사이즈} 만큼만 마지막 블록에서 읽으면 됩니다.

http://www.joinc.co.kr/modules/moniwiki/wiki.php/ext2 <- 한번 읽어보세요

charsyam의 이미지

nonun wrote:
-_-;;;;
파일시스템 마다 다를테지만 ext2의 경우 i-node에는 이 파일이 몇개의 블록을 사용하고 있는지와 블록들의 물리적인 주소를 배열로 가지게 됩니다. 파일의 크기도 역시 기억하고 있고요.
feof를 구현하는 방법은
({슈퍼블록에 명시된 한 블록의 크기} * {i-node에 명시된 블록 배열의 크기}) - {i-node에 명시된 파일 사이즈} 만큼만 마지막 블록에서 읽으면 됩니다.

http://www.joinc.co.kr/modules/moniwiki/wiki.php/ext2 <- 한번 읽어보세요

FILE 구조체를 보면 현재 위치에 대한 offset 이 있습니다. read, write, seek 등으로 이 오프셋이 바뀌게 되죠. 그리고 inode를 보면 전체 파일의 블록수와 파일 사이즈도 있습니다. 이 파일 사이즈와 오프셋을 비교해보면 금방 알 수 있겠죠. 그럼 고운 하루되세요.

=========================
CharSyam ^^ --- 고운 하루
=========================

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.