dd bs=X count=1 X バイト未満読み出し

dd bs=X count=1 X バイト未満読み出し

私はddGNU 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

ddsleepブロックサイズに達しなくても期間中に終了しますEOF。出力がb\n失われます。またはを削除すると、sleepこれは発生しませんcount=1

この動作を説明する内容が見つかりman ddません。

  1. 到着や出会いdd count=1まで待ちませんか?bsEOF
  2. dd強制的に待つにはどうすればよいですか?

ベストアンサー1

これは、ddの動作ではなく、オペレーティングシステム固有の動作が原因で発生します。これは行動です。posixで指定

ファイルに残っているバイト数がnbyte未満の場合、read()要求がシグナルによって中断されると、返された値はnbyteより小さくなる可能性があります。ファイルがパイプ、FIFO、または特殊ファイルで nbyte 未満の場合はすぐに使用可能読書のため。たとえば、端末に関連付けられたファイルの read() は、入力されたデータ行を返すことができます。

設定時に一度に4バイトを読み取ることをbs=4指定しましたが、ddこれはそれぞれ4バイトを要求したことを意味しますread()。オペレーティングシステムはあまり頻繁に返されませddread()

ブロック全体を読み取るために複数のタスクを実行するiflag=fullblockコマンドがあります。ddread()

おすすめ記事