Bash

管道中的程序,一次處理 256 個字節

  • July 23, 2020

我在 Cyclone 5 上有一個 ac 程序,它使用連接的 FPGA 進行 FFT。該程序目前從 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 個字節。

像這樣的東西:

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 程序,那麼更改它以使其在其輸入文件上循環應該很難嗎?

使用 GNU 並行:

cat input_s16le_audio.pcm |
 parallel --pipe --recend '' --block 256 ./fpga_fft

如果多個fpga_fft不能並行執行,添加-j0

引用自:https://unix.stackexchange.com/questions/594997