パイプのプロセスは一度に256バイトを処理します。

パイプのプロセスは一度に256バイトを処理します。

接続されたFPGAを使用してFFTを実行するCyclone 5にACプログラムがあります。プログラムは現在256バイトを取得してstdin処理し、FFT結果を提供しますstdout。 Cyclone 5のLinux bashでこのように実行しました。

./fpga_fft < input_s16le_audio.pcm

これは最初の256バイトのみを評価します。 * .pcmファイルのすべての内容を読み取るまで、標準入力ストリームを使用してプログラムが呼び出され続けるにはどうすればよいですか?

アイデア:

cat input_s16le_audio.pcm|xargs ./fpga_fft

どういうわけか、xargsは一度に256バイトを時間順に(並列ではなく)処理するように指示する必要があります。

ベストアンサー1

このような:

for i in {0..N} 
do
    dd if=input_s16le_audio.pcm bs=256 count=1 skip=$i |  ./fpga_fft
done

明らかにforループは、ファイル全体が処理されたときに停止するループに置き換える必要があります(ddは、スキップ値が大きすぎる場合にのみ0バイトを送信するため、誤ったrcを計算できません)。

これでCプログラムがあると、入力ファイルを繰り返すように変更するのは難しいでしょう。

おすすめ記事