Limitação de tamanho de arquivo de acordo com o livro de Robert Love

4

De Linux System Programming de Robert Love (2007, O'Reilly), é isso que é dado no primeiro parágrafo (Capítulo 1, página 10):

The file position’s maximum value is bounded only by the size of the C type used to store it, which is 64-bits in contemporary Linux.

Mas no próximo parágrafo ele diz:

A file may be empty (have a length of zero), and thus contain no valid bytes. The maximum file length, as with the maximum file position, is bounded only by limits on the sizes of the C types that the Linux kernel uses to manage files.

Eu sei que isso pode ser muito, muito básico, mas ele está dizendo que o tamanho do arquivo é limitado pelo tipo de dado FILE ou o tipo de dado int ?

    
por Arpith 16.07.2014 / 14:28

1 resposta

5

Ele está dizendo que está ligado por um tipo de 64 bits, que tem um valor máximo de (2 ^ 64) - 1 sem sinal, ou (2 ^ 63) - 1 sinalizado (1 bit contém o sinal, +/-).

O tipo não é FILE ; é o que a implementação usa para rastrear o deslocamento no arquivo, ou seja, off_t , que é um typedef para um tipo de 64 bits assinado . 1 (2 ^ 63) - 1 = 9223372036854775807. Se um terabyte é de 1000 ^ 4 bytes, isso significa ~ 9,2 milhões de TB. Presumivelmente, o motivo pelo qual um tipo assinado é usado é para que ele possa conter um valor de -1 (para erros, etc) ou um deslocamento relativo.

Funções como fseek() e ftell() usam um long assinado, que em sistemas GNU de 64 bits também é de 64 bits.

1. Veja types.h e typesizes.h em /usr/include/bits .

    
por 16.07.2014 / 14:38