El código que publicaste es de la función "obtener encabezado _" que genera el texto en la primera fila. En su caso, esto se aplica al encabezado "1K -bloques" (llame df -B1023
para ver la diferencia ).
Importante tener en cuenta :"1K" se refiere a bloques de 1024 -bytes, no a bloques de 1000 -bytes (indicados por "bloques de 1kB -", consultedf -B1000
)
El cálculo de los números en el formato legible por humanos es manejado por la función "human _readable" (human.c :153 ). En df.c :1571 puede encontrar las opciones que se utilizan cuando se llama con la bandera -h
:
case 'h':
human_output_opts = human_autoscale | human_SI | human_base_1024;
output_block_size = 1;
break;
Todos los cálculos se realizan con base 1024 en formato legible por humanos (" -h" ). Además de las opciones humanas _de salida _que se muestran, hay una configuración predeterminada que se aplica aquí (consulte human.h, declaración de enumeración):
/* The following three options are mutually exclusive. */
/* Round to plus infinity (default). */
human_ceiling = 0,
/* Round to nearest, ties to even. */
human_round_to_nearest = 1,
/* Round to minus infinity. */
human_floor = 2,
Como la salida humana __opts no incluye humano _redondo _a _más cercano o humano _piso, utilizará su valor predeterminado de humano _techo. Por lo tanto, todos los valores calculados se redondearán hacia arriba.
Para verificar la configuración, podemos intentar calcular el formato legible por humanos en función de los bloques de 1K -dedf
:
Size = ceil(41943040/1024/1024) = ceil(40) = 40
Used = ceil(7659828/1024/1024) = ceil(7.305) = 7.4
Available = ceil(34283212/1024/1024) = ceil(32.695) = 33
Que es lo mismo que la salida de df -h
.
(... y si prefiere el formato de 1000 -bytes, simplemente puede llamar adf -H
).