
私はdd
GNU coreutils 8.32から始めます。
走ると手に{ echo a; sleep 1; echo b; } | dd bs=4 count=1
入る
a
0+1 records in
0+1 records out
2 bytes copied, 2.0381e-05 s, 98.1 kB/s
dd
sleep
ブロックサイズに達しなくても期間中に終了しますEOF
。出力がb\n
失われます。またはを削除すると、sleep
これは発生しませんcount=1
。
この動作を説明する内容が見つかりman dd
ません。
- 到着や出会い
dd count=1
まで待ちませんか?bs
EOF
dd
強制的に待つにはどうすればよいですか?
答え1
これは、ddの動作ではなく、オペレーティングシステム固有の動作が原因で発生します。これは行動です。posixで指定。
ファイルに残っているバイト数がnbyte未満の場合、read()要求がシグナルによって中断されると、返された値はnbyteより小さくなる可能性があります。ファイルがパイプ、FIFO、または特殊ファイルで nbyte 未満の場合はすぐに使用可能読書のため。たとえば、端末に関連付けられたファイルの read() は、入力されたデータ行を返すことができます。
設定時に一度に4バイトを読み取ることをbs=4
指定しましたが、dd
これはそれぞれ4バイトを要求したことを意味しますread()
。オペレーティングシステムはあまり頻繁に返されませdd
んread()
。
ブロック全体を読み取るために複数のタスクを実行するiflag=fullblock
コマンドがあります。dd
read()