이전 리눅스 파일 시스템에서 File의 최대 크기는 2147483647byte 즉 2GB(1.99)였다.
이는 2^31 -1의 값이다. 즉
int32형에서 표현 가능한 최대 양수이다.
OS상에서 File의 주소, Offset 관련 Data가 int32형으로 표현 되어 있었기에 제한이 있었던 것 같다.
마찬가지로 fopen, fwrite등의 함수로 2GB넘는 파일에 접근이 불가능 하다. 내부적응로 int32가 박혀 있을 것 같다.
그래서 라이브러리에서는 2GB 이상의 파일을 다룰 수 있도록 fopen64, fwrite64등의 함수를 제공 하고 있다.
그렇다면 기존의 파일은 어떻게 하나? 일일히 바꾸기 힘들기에 다음 옵션을 사용 할 수 있다.
컴파일 옵션에 -D_FILE_OFFSET_BITS=64 을 입력 하면 file 관련 함수, 변수들이 자동으로 32->64 bit용으로 변경이
된다고 한다.
** 16.02.07 추가
fseek 함수와 ftell 함수는 위의 컴파일 옵션으로 해결이 안된다.
이 함수들은 자체적으로 fseeko 와 ftello 함수로 변경 해주어야 한다.
'개발 이야기 > C 이야기' 카테고리의 다른 글
[C] char에 저장된 값이 영어인지 한글인지 구분 하는 방법 (0) | 2013.03.29 |
---|---|
[C] 문자열 내에서 문자열 위치 검색 - ver1 (0) | 2013.03.29 |
[C] trim 구현 (0) | 2013.03.29 |
[C] split 기능 사용하기 (0) | 2013.03.29 |
[C] C에서 VB의 Ubound 함수 사용하기 (0) | 2013.03.29 |