왜?블록 수를 측정하는 경우 blkcnt_t 부호 있는 값입니까?

왜?블록 수를 측정하는 경우 blkcnt_t 부호 있는 값입니까?

<sys/types.h>유형 관련 참조에서 다음 과 같이 blkcnt_t정의됩니다 .

blockcnt_t 파일 블록 계산에 사용됩니다.

또한 다음과 같이 명시합니다.

blockcnt_toff_t는 부호 있는 정수 유형이어야 합니다.

(바라보다http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html#tag_13_67)

블록 개수가 음수인 이유를 찾을 수 없는데 왜 부호 있는 유형으로 정의되어 있는지 궁금합니다.

비록 나는 a를 사용하는 것을 상상할 수 없지만부정적인블록 수, blkcnt_t에 할당될 수 있다고 생각합니다.부정적인일종의 오류/예외를 나타내는 값인가요?

흥미로운 사실은 blkcnt_t 유형이 unsigned로 도입되었다는 것입니다(참조여기) 그런 다음 서명으로 변경합니다(참조:여기). 이 변경 사항에 대한 설명/이유로 다음 커밋 메시지가 제공됩니다.

"blkcnt_t 및 off_t는 부호 있는 정수 유형이어야 합니다." 네트워크 업데이트 작업에 대한 크기 요구 사항이 음수이면 이로 인해 pacman이 실패하고 대신 큰 양수를 계산합니다.

답변1

서명 산술을 지원하거나 서명된 블록 수 증가분을 저장하기 위해 서명된 것 같습니다.비틀거리다pacman그리고 프롬프트시그윈 패치언급하셨습니다.)

Linux 커널에서는 여전히아직 서명되지 않았습니다..

답변2

이는 아마도 이전 버전과의 호환성을 위한 것일 수 있습니다. 이전 버전에는 유형이 없었지만 blkcnt_t필드는 long. 따라서 보다 유연한 사양으로 이동할 때 해당 분야의 상징적 특성을 보존하기를 원할 수도 있습니다.

관련 정보