파일 생성 후 용량 확보

Seraph99의 이미지

리눅스 C 프로그래밍을 하다가 궁금한 점이 있어서 QNA에 남기게 되었습니다.

큰 용량의 파일을 확보하기 위해 파일을 생성한 후 lseek 와 write를 사용하여 용량을 확보 하였습니다.

그러나 DF에서는 사용량 표시가 여전히 확보가 되어 있지 않고 조금 증가한 것으로 나와 있습니다.

해결할 수 있는 방법이 무엇이 있는지요?

답변 부탁드립니다.

singlet의 이미지

원래 그렇게 동작하는 게 정상입니다. lseek() 관련 문서 (man lseek, info libc 'Low-Level I/O' 'File Position Primitive') 에 보면 간단한 언급이 나와 있을 것이며, sparse file 로 웹 검색해보셔도 나올 겁니다. 괜찮은 유닉스 관련 서적(APUE 등)에서도 웬만하면 다루고 있을 거구요.

그건 그렇고, DF라고 적으신 건 /usr/bin/df를 의미하신 건가요? 만일 이 경우라면 앞으로는 반드시 소문자로 적어주세요. 리눅스에서는 파일명에서 대소문자를 구분하기 때문에 DF라는 명령은 존재하지 않습니다.

Seraph99의 이미지

상세한 답변에 감사드립니다.

덕분에 많은 도움이 되었습니다.

한가지만 더 질문 드리겠습니다.

리눅스에서 하드디스크 용량 체크할 때 위와 같은 sparse file 을 포함하여 용량을 체크하고 싶을때는 어떤 방법으로 하는지요?

답변 부탁드립니다.

PS : statvfs로 파일시스템 정보를 읽어와 하드 남은용량 체크를 합니다.
그러나 이방법은 사용된 블럭을 기준으로 하므로 sparse file의 크기가 적용되지 않은 상태로 나오게 됩니다.
다른 어떤 방법이 있을까요?