回答:
それは、そのbsサイズのブロック全体に加えて、bsより小さいサイズの追加ブロックを意味します。
pushd "$(mktemp -d)"
dd if=/dev/zero of=1 bs=64M count=1 # and you get a 1+0
dd if=1 of=/dev/null bs=16M # 4+0
dd if=1 of=/dev/null bs=20M # 3+1
dd if=1 of=/dev/null bs=80M # 0+1
_crap=$PWD; popd; rm -rf "$_crap"; unset _crap
# frostschutz's case
yes | dd of=/dev/null bs=64M count=1 # 0+1
編集:frostschutzの答えは、非フルブロックを生成する別のケースに言及しています。読む価値があります。/unix//a/17357/73443も参照してください。
記述子にハングアップして入力を待つことができる標準的なコマンドラインユーティリティは多数あります。それがほとんどすべての仕組みです。ddこれは記述子が現在どのように見えるかを示すことができるという点でユニークです。
個人的には、GNU iflag=fullblockオプションの背後にある有用性を本当に理解していません。つまり、cat少なくともブロックサイズを心配することなく、少なくとも同じくらい簡単に入力することができます。
しかし、ストリームの一部をdd取ることができます-そしてそれは合理的に現代のシステムで/ 境界でそれを行うことができます。read()write()
{ (     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 stderr0000000   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
ddread()入力ブロックごとに1 つ実行します。ファイルならば、それはしようとするread()-それはそれは問題ではない要求している限りデータを持っていない1つの read()カウントとして1つの入力のブロック。それがどのように動作するかです-それがddの主要なユーティリティです。
ジョブが完了すると、処理ddしたすべての入力/出力ブロックについてレポートします。上記のコマンドを再度実行しますが、今回は代わりにstdoutをドロップします...
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それぞれの時間がddなかったread(0,&in,64) read短い帰ってきた-その標準入力ファイルディスクリプタは、それはそれを作ったとき、それはその要求を満たすために待っている十分なバイトを持っていなかったので。したがってdd read()、完全な入力レコードは0個、短い入力レコードは2個です。それが、これらのレポートの意味です。