Bash
管道中的程序,一次處理 256 個字節
我在 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