O campo st_blksize
retornado por stat()
fornece o "tamanho de bloco preferido para E / S de sistema de arquivos eficiente". (da página stat
man). O valor deve ser interpretado como uma sugestão de que você deve ler e gravar dados em arquivos em múltiplos desse tamanho para uma E / S eficiente. É, como você diz, dependente do dispositivo de armazenamento e também pode depender do sistema de arquivos. Pode ser maior que o tamanho de bloco lógico do dispositivo de hardware, mas é tipicamente limitado pelo tamanho da página de memória da CPU. O tamanho do bloco lógico é normalmente de 512 ou 4096 bytes em discos rígidos e 2048 bytes em mídia ótica.
A propósito, seu código usa o campo st_blocks
da estrutura stat
. Este campo informa quantos blocos de 512 bytes o arquivo ocupa. Eu acho que você queria usar o campo st_blksize
em seu programa.