Existem dezenas de utilitários de linha de comando padrão que podem ser pendurados em um descritor e aguardar a entrada. É assim que eles funcionam. dd
é único, pois pode mostrar a aparência de um descritor agora .
Pessoalmente, eu realmente não entendo a utilidade por trás da iflag=fullblock
opção GNU . Quero dizer, você pode apenas cat
digitar sua entrada com a mesma facilidade e sem precisar se preocupar com o tamanho dos blocos de E / S.
Mas dd
pode ter um parte de um fluxo - e pode fazê-lo em read()
/ write()
limites em um sistema razoavelmente moderno.
{ ( sleep 1 #don't write() til dd is definitely setup
printf 123 #write() 3 bytes
printf %-30s\\n 456 #write() 31 bytes
printf you\ there\? #write() 10 bytes
)| dd bs=64 count=2 conv=sync| #2 64 byte read()/write() \0-padded blocks
od -vtc #show it with octal radices
} 2>/dev/null #drop stderr
0000000 1 2 3 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000020 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000040 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000060 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000100 4 5 6
0000120 \n \0
0000140 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000160 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0 \0
0000200
dd
faz um único read()
por bloco de entrada. Se o arquivo que ele tenta read()
não possui tantos dados quanto solicitados, não importa - o que read()
conta como um bloco de entrada. É assim que funciona - essa é dd
a principal utilidade.
Quando ele faz seu trabalho, dd
relatórios sobre todos os blocos de entrada / saída com os quais ele lidou. Executando o comando acima novamente, mas eliminando stdout desta vez ...
dd: warning: partial read (3 bytes); suggest iflag=fullblock
0+2 records in
2+0 records out
128 bytes (128 B) copied, 1.00161 s, 0.1 kB/s
A cada vez dd
, o tempo read(0,&in,64)
read
era curto - porque seu descritor de arquivo stdin não tinha bytes suficientes esperando que ele cumprisse sua solicitação quando o fez. E assim, dd
read()
0 registros de entrada completos e 2 curtos. É isso que esses relatórios significam.