我有一个程序(可能是也可能不是aplay
)接受其标准输入的速度相当慢。写入所述标准输入(例如通过管道)的程序往往会在写入时阻塞很多。需要等待输入是不可接受的(因为这会导致音频中断)。所说的标准输入(例如通过管道)往往会在写入时阻塞很多。向其提供输入的程序可以相当快地完成此操作,但偶尔会出现口吃并时不时地停止生成输入。需要等待输入是不可接受的(因为这会导致音频中断)。
是否有一个程序可以从 stdin 读取一堆数据并将其保存在 RAM 中直到 stdout 写入完成?
有点像这个 Python 程序,我在五分钟内就卡住了,只是用 C 语言,而在五分钟内没有卡住:
import threading
import sys
import queue
stdin=sys.stdin.detach().detach() # detach TextIOWrapper, then detach BufferedWriter for a raw input stream.
stdout=sys.stdout.detach()
q=queue.Queue()
def worker(q,stdout):
while True:
data=q.get()
if data is None:
return
stdout.write(data)
threading.Thread(target=worker, args=(q,stdout)).start()
data=stdin.read(8192)
while data:
q.put(data)
data=stdin.read(8192)
q.put(None)
也许具有在 RAM 中保存可配置数量的数据等功能,而不是仅仅等到用完为止?也许暂停读取输入并在发送 SIGUSR1 和 SIGUSR2 时恢复它?
像这样的东西一定存在,不是吗?只是我不知道该谷歌什么。