대상 플랫폼이 x86 인 레거시 응용 프로그램이 있습니다. 응용 프로그램은 파일을 읽고 쓰며 파일 영역도 잠급니다. 이 앱은 2GB의 가치 만있는 파일로 작성되었습니다. 그러나 2GB +를 지원하려면 앱이 필요했기 때문에 대부분의 호출을 변경해야했습니다. 기본적으로 _lseek 및 _tell은 _lseeki64() 및 _tell64()로 변경되었습니다. 과거의 위치 찾기 (2^32) -1에는 그 위치에 대한 read()뿐만 아니라 문제가 없습니다. 그러나 _locking()을 호출하면 -1의 반환 값과 22의 errno를 얻습니다.Visual Studio 2010 파일 포인터가 2^32 이상일 때 _locking() 호출 실패 (errno = 22) -1
이렇게하면 _locking()을 시도하는 오프셋 및 길이가 _locking) 전화. x64를 대상으로 시도했지만 도구 세트 v100이 64 비트 버전의 라이브러리에 필요한 io.h를 아직 목표로 설정하지 않은 것처럼 보입니다.
나는 모호한 질문이지만이 문제를 해결할 방법이 있는지, 나의 마지막 옵션은 WIN32 API를 사용하도록 코드를 이식하는 것인가?
이러한 레거시 POSIX 기능은 유지 관리 모드입니다. 독자적인 locking64() 함수를 작성해야합니다. 영감을 얻으려면 vc/crt/src에있는 CRT 소스 파일 locking.c를 사용하십시오. –
@HansPassant 대단히 감사합니다! 왜 이것이 내 마음을 건너 뛸지 모르겠다 ... 나는 v2012 툴셋 소스를보고 결국 더 높은 툴셋을 목표로하는 옵션이 아닌 잠금 기능을 사용하게되었다. 이것이 내가 필요한 대답이다. – user1702875