2011-01-23 1 views
0
#define _FILE_OFFSET_BITS 64 
#define _LARGEFILE64_SOURCE  

... 

off64_t st_size; 

... 

st_size = (off64_t)lseek64(fd, (off64_t)0, SEEK_END); 
fprintf(stderr, "QQQ st_size=%llx %lld\n", st_size, st_size); 

그런 다음 strace를 :lseek64를 만드는 방법 _actually_ 64 비트 오프셋을 반환 하시겠습니까?

$ strace -e _llseek ./the_program 
_llseek(3, 0, [20974464000], SEEK_END) = 0 
QQQ st_size=ffffffffe22cec00 -500372480 
  • 20974464000 == 0x4E22CEC00 - 좋은
  • -500372480 == 0xffffffffe22cec00 -

나쁜 그것은 (off64_t)lseek64(fd, 0, SEEK_END);로 변경이 _llseek 잘못 호출

_llseek(3, 8589934592, [8589934592], SEEK_SET) = 0 
st_size=0 0 

주요 dword를 자르지 않고 크기를 올바르게 확보하려면 어떻게해야합니까?

답변

3

_FILE_OFFSET_BITS_LARGEFILE64_SOURCE 앞에 sys/types.h 및 unistd.h가 포함되도록 정의했는지 확인하십시오. 가급적이면, 컴파일러의 명령 행에서.

+0

예, 이전입니다. 이전에 의견이 있습니다. –

+0

... Hovever sys/types.h와 unistd.h는 전혀 포함되지 않았습니다. 중요한 실수는 "- 벽"을 잊어 버리는 것입니다. –

관련 문제