du
usa stat(2)
para encontrar o número de blocos usados por um arquivo. Se você executar stat big
, deverá ver que o número de blocos corresponde ao número dado por du
.
Você pode forçar o du
a contar os bytes usando a opção -b
; então a saída corresponde a ls
's.
Em ambos os casos, usa stat(2)
(ou melhor, fstatat(2)
, pelo menos na versão que tenho):
$ strace du big|&grep big
execve("/usr/bin/du", ["du", "big"], [/* 57 vars */]) = 0
newfstatat(AT_FDCWD, "big", {st_mode=S_IFREG|0644, st_size=2147483648, ...}, AT_SYMLINK_NOFOLLOW) = 0
write(1, "0\tbig\n", 60 big
A diferença no processamento é visível em du.c
.