off_t
값을 malloc()
(예상 값 size_t
)으로 전달할 때 문제가 발생할 수 있습니까?모든 파일 내용을 문자열로 읽는 중 - offset_t 값을 malloc()에 전달하는 데 문제가있을 수 있습니까?
나는 파일을 읽고 그 내용을 메모리에 저장하고 있습니다. stat()
함수에 전달 내가 전화를 할 것입니다 경우 다음 메모리가 nmemb
나의 malloc()
buf
로 파일 크기를 반환 통과 fread()
에 malloc()
에 전달 된 후 파일 크기는 struct stat
에서 st_size
구성원에 의해 얻어진다.
그러나 질문은 : 파일 크기가 실제로 size_t
에 의해 보유 될 수없는 큰 수인 경우 malloc()
의 32 비트/64 비트 시스템에서의 작동은 무엇인가 : 정수 오버플로 및 깨진 buf 요청한 바이트 수가 실제로 반환되지 않았습니다) 또는 NULL
?
나는 정말로 일어날 수는 없다는 것을 알고 있기 때문에 아마도이 응용 프로그램을 슈퍼 컴퓨터에 사용하고 내 파서에게 가장 큰 파일을 요청할 것입니다. 그러나 나는 행동에 대해서 가능한 한 최대의 것을 이해하는 것을 정말로 좋아합니다. 그건 결코 일어날 수없는 일입니다.
'stat_t'는 비표준'stat64'가 아니라'off_t'가 64 비트 인 적절한 프로그래밍 환경과 함께 사용하십시오. –
@R .., IIRC 당신이 "off_t"가 64 비트 인 적절한 프로그래밍 환경으로 "stat"를 호출하는 것은 * 내가 생각할 수있는 대부분의 플랫폼에서 실제로'stat64'이다 (Linux, Solaris 등, 아마도 ABI/compatibility * oblige *와 같은) 전 처리기 설탕 (OpenBSD는 아닐지도 모르겠다.) 위의 검사의 요점은 "올바른 일을하는 것"이다. 아무 것도하지 않으면 서 누군가가 올바른 LFS 매크로를 정의하는 것을 잊었 기 때문에 컴파일 시간,'stat64'를 위해 곧바로갔습니다. 그렇지만'sizeof (off_t)> = 64'를 확인하고 지원한다면 LFS 활성화에 대해 경고 할 수 있습니다. – vladr
저의 요점은 당신이 구현 세부 사항 (예 :'stat64' 또는'mmap2', 후자는 함수 이름조차도 내부 syscall 이름이 아닙니다)을 깨끗하고 이식 가능한 프로그래밍 관행 대신에 가르쳐서는 안된다는 것입니다. –