Pipe 中的进程一次处理 256 个字节

Pipe 中的进程一次处理 256 个字节

我在 Cyclone 5 上有一个交流程序,它使用连接的 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 个字节。

答案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 程序,那么更改它以使其在输入文件上循环应该很困难吧?

答案2

使用 GNU 并行:

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

如果多个fpga_fft无法并行运行,请添加-j0

相关内容