Por que sys / types.h blkcnt_t é um valor assinado se mede o número de blocos?

1

Nas refs relacionadas a <sys/types.h> , o tipo blkcnt_t é definido como:

blkcnt_t Used for file block counts.

também afirma:

blkcnt_t and off_t shall be signed integer types.

(consulte link )

Não consegui encontrar a razão para o número de blocos ser negativo, por isso me pergunto por que o tipo é definido como assinado?

Embora eu não consiga imaginar bem o uso de arquivos com um número negativo de blocos, eu pensaria que blkcnt_t poderia receber um valor negativo para indicar algum tipo de erro / condição excepcional?

O fato é que o tipo blkcnt_t foi introduzido como não assinado (consulte aqui ) e depois alterado para ser assinado (consulte aqui ). Como descrição / razão por que esta mudança aconteceu esta mensagem de commit é dada:

"blkcnt_t and off_t shall be signed integer types." This causes pacman to fail when the size requirement of the net update operation is negative, instead it calculated a huge positive number.

    
por humanityANDpeace 22.03.2017 / 11:06

2 respostas

2

Eu imagino que ele esteja assinado para suportar aritmética assinada, ou melhor, armazenar deltas de contagem de blocos assinados (que é o que tropeçou em pacman e solicitou o patch do Cygwin que você mencionou).

No kernel do Linux ainda é ainda não assinado .

    
por 22.03.2017 / 11:33
0

Isso provavelmente é apenas para compatibilidade com versões anteriores. Nas versões anteriores, não havia nenhum tipo blkcnt_t , mas o campo tinha sido simplesmente long . Então, quando eles mudaram para uma especificação mais flexível, eles provavelmente queriam manter a assinatura do campo.

    
por 09.08.2017 / 13:55

Tags