Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何构建延迟/缓冲管道?_Linux_Bash_Pipe - Fatal编程技术网

Linux 如何构建延迟/缓冲管道?

Linux 如何构建延迟/缓冲管道?,linux,bash,pipe,Linux,Bash,Pipe,是否有可能构建一个缓冲管道来保留来自标准linux工具(如cat、dd等)的数据(在一定数量的字节或一定时间内) 例如,收集一定数量的数据包、音频数据或其他信息 例如,要构建一个脚本delaybuffer,执行以下操作: arecord | delaybuffer 16000 | aplay 要播放录制的音频,延迟16000字节 有一个名为buffer的工具来完成这项工作。(-也可能在其他发行版中提供。) 缓冲区使用共享内存将可变输入数据速率转换为恒定输出数据速率 另一种方法是使用dd(如果您

是否有可能构建一个缓冲管道来保留来自标准linux工具(如cat、dd等)的数据(在一定数量的字节或一定时间内)

例如,收集一定数量的数据包、音频数据或其他信息

例如,要构建一个脚本
delaybuffer
,执行以下操作:

arecord | delaybuffer 16000 | aplay

要播放录制的音频,延迟16000字节

有一个名为
buffer
的工具来完成这项工作。(-也可能在其他发行版中提供。)

缓冲区使用共享内存将可变输入数据速率转换为恒定输出数据速率


另一种方法是使用dd(如果您的dist上不存在缓冲区)


我不太确定这些标志,可能有更好的方法,而不仅仅是一次爆破一个块。

以下内容给了
cdparanoia
在开始读取输出之前提取音频CD曲目7的4秒障碍。 可以作为命令行cd播放器使用

cdparanoia 7 ~/temp.wav & sleep 4 ; tail -f -c +1 ~/temp.wav | aplay

16000字节应读取哪些字节?零字节?还有别的吗?delaybuffer命令如何知道一次读取一次要消耗多少字节?您的意思是说缓冲区程序在读取16000字节之前不应该写入?一旦它读取了规定的字节,就开始写入所有数据?注意这一点——如果选择的大小太大,管道可能会满,从而导致
arecord
的写入阻塞,整个链也会停止。根据
man7pipe
最新的Linux内核的管道容量为65535。因此,16000是安全的,但是要注意,如果这个太大,就会破坏它。C编译器算是“标准linux工具”吗?我不希望内核管道缓冲区保存我的数据,但是一些
delaybuffer
自己的内存。下面的答案似乎与此相符。谢谢。这正是我的想法。只是想知道是否有可能得到一个基于磁盘的缓冲区?因此,它也可以用来缓冲视频数据的大延迟,例如…我认为这就是答案,即使它通常需要在大多数系统上安装一个工具。但是,似乎没有简单的解决方案,如果您需要在写入之前确保缓冲区已满,则需要使用
-p
选项。还有另一个名为
mbuffer
的工具,其工作原理类似。
cdparanoia 7 ~/temp.wav & sleep 4 ; tail -f -c +1 ~/temp.wav | aplay