문제

내 이전 질문은 원시 데이터 읽기 및 쓰기에 관한 것이었지만 새로운 문제가 발생했습니다. 끝이 없는 것 같습니다....

질문은 ~이야:다음과 같은 함수의 매개변수 lseek() 또는 fseek() 모두 4바이트입니다.4G를 통해 범위를 이동하려면 불가능합니다.Win32에는 다음과 같은 기능이 있다는 것을 알고 있습니다. SetPointer(...,Hign, Low,....), 이 포인터는 64바이트 포인터를 생성할 수 있는데, 이것이 바로 내가 원하는 것입니다.

그러나 Linux 또는 Unix에서 앱을 만들려면 (파일을 만들거나 원시 드라이브 섹터를 직접 쓰기) 4G 이상의 포인터로 어떻게 이동할 수 있습니까?

감사합니다. 답변을 기다리는 중입니다...

도움이 되었습니까?

해결책

오프셋 매개 변수 lseek 유형입니다 off_t. 32 비트 컴파일 환경 에서이 유형의 기본값은 32 비트 서명 된 정수로 기본값을 제공합니다.

#define _FILE_OFFSET_BITS 64

...그 다음에 off_t 64 비트 서명 유형입니다.

을 위한 fseek,, fseeko 함수는 사용한다는 점을 제외하고는 동일합니다 off_t 오프셋에 유형을 입력하므로 위의 솔루션도 작업 할 수 있습니다.

다른 팁

4바이트 부호 없는 정수는 최대 4294967295까지의 값을 나타낼 수 있습니다. 이는 4G 이상을 이동하려면 lseek64()를 사용해야 함을 의미합니다.또한 fgetpos() 및 fsetpos()를 사용하여 파일의 위치를 ​​변경할 수 있습니다.

Windows에서 사용합니다 _lseeki64(), Linux에서, lseek64().

사용하는 것이 좋습니다 lseek64() 다음과 같은 작업을 수행하여 두 시스템 모두에서 다음과 같습니다.

#ifdef _WIN32
#include <io.h>
#define lseek64 _lseeki64
#else
#include <unistd.h>
#endif

그게 당신이 필요한 전부입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top