파일의 끝은 어떻게 아나요?
글쓴이: keedi / 작성시간: 수, 2004/05/05 - 6:04오전
안녕하세요.
이미 날이 밝아 버렸으니 저도 아침형 인간이로군요... 후훗... :=)
공부를 하다가 문득 리눅스에서는(비단 리눅스 뿐만은 아니겠지만...) 파일에는
데이터만 저장하고 그 파일에 대한 정보... 즉 메타 데이터는 i-node에 저장
한다는 부분을 읽게 되었습니다.
씨 언어에서 파일의 끝인지 체크하는 함수 feof()의 경우에 파일 자체는 자료
만을 지니고 있다면 현재 파일의 끝인지는 어떻게 아는지요. 파일 자체로
아는 것이 아니라 i-node 부분을 참조해서 알게 되는것인가요?
feof()와 같은 파일의 끝을 체크해서 결과 값을 사용자에게 돌려주는 함수들의
동작 방식이 궁금합니다.
Forums:
stat(), fstat()하면 파일 크기 나옵니다.그리고 파일
stat(), fstat()하면 파일 크기 나옵니다.
그리고 파일 끝에 도달하면 read()하면 읽어들인 바이트수가 없습니다.
lseek() 등등을 쓰면 현재 파일에서 읽고 쓸 작업위치 돌려줍니다.
파일관련 C 표준 라이브러리는 내부적으로는 이들을 이용합니다.
Written By the Black Knight of Destruction
-_-;;;;파일시스템 마다 다를테지만 ext2의 경우 i-node에
-_-;;;;
파일시스템 마다 다를테지만 ext2의 경우 i-node에는 이 파일이 몇개의 블록을 사용하고 있는지와 블록들의 물리적인 주소를 배열로 가지게 됩니다. 파일의 크기도 역시 기억하고 있고요.
feof를 구현하는 방법은
({슈퍼블록에 명시된 한 블록의 크기} * {i-node에 명시된 블록 배열의 크기}) - {i-node에 명시된 파일 사이즈} 만큼만 마지막 블록에서 읽으면 됩니다.
http://www.joinc.co.kr/modules/moniwiki/wiki.php/ext2 <- 한번 읽어보세요
[quote="nonun"]-_-;;;;파일시스템 마다 다를테지만 e
FILE 구조체를 보면 현재 위치에 대한 offset 이 있습니다. read, write, seek 등으로 이 오프셋이 바뀌게 되죠. 그리고 inode를 보면 전체 파일의 블록수와 파일 사이즈도 있습니다. 이 파일 사이즈와 오프셋을 비교해보면 금방 알 수 있겠죠. 그럼 고운 하루되세요.
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기