Ada lusinan utilitas baris perintah standar yang dapat menunggu deskriptor dan menunggu input. Begitulah cara mereka semua bekerja. dd
unik karena dapat menunjukkan kepada Anda seperti apa deskriptor sekarang .
Secara pribadi, saya tidak begitu mengerti manfaat di balik GNU iflag=fullblock
opsi . Maksud saya, Anda hanya dapat cat
input Anda setidaknya dengan mudah dan tanpa harus khawatir tentang ukuran blok i / o sama sekali.
Tetapi dd
dapat mengambil bagian dari aliran - dan dapat melakukannya di read()
/ write()
batas pada sistem yang cukup modern.
{ ( 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
melakukan satu read()
blok input per. Jika file itu mencoba untuk read()
tidak memiliki data sebanyak itu telah meminta tidak peduli - yang satu read()
dianggap sebagai salah satu blok masukan. Begitulah cara kerjanya - itu adalah dd
utilitas utama.
Ketika telah melakukan tugasnya, dd
laporkan semua blok input / output yang telah ditangani. Menjalankan perintah di atas lagi, tetapi menjatuhkan stdout kali ini ...
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
Setiap kali dd
memang read(0,&in,64)
read
kembali pendek - karena file stdin deskriptor tidak memiliki cukup byte menunggu untuk memenuhi permintaannya ketika membuatnya. Dan dd
read()
0 catatan input penuh, dan 2 catatan pendek. Itulah yang dimaksud laporan itu.