有没有办法在shell中创建非阻塞/异步命名管道或类似的东西?因此程序可以在其中放置行,这些行将留在ram中,而当一些程序可以从管道中读取一些行时,而不是将未读取的行留在fifo中?程序也很可能同时对该fifo进行写入和读取操作。起初,我认为这也许可以使用文件来完成,但在搜索了一段时间后,似乎没有什么好东西可以来自于文件同时被读和写的事实。命名管道几乎可以工作,但有两个问题:第一,如果另一端没有人,它们会阻塞读/写;第二,即使我让写被阻塞,并设置两个进程在没有人读取的情况下写入管道,通过尝试为每个进程写一行,然后尝试head -n 1 <fifo>我只得到我需要的一行,但是两个写进程都终止了,第二行丢失了。有什么建议吗?
编辑:也许可以使用一些中间程序来帮助实现这一点,就像作者和读者之间的中间人一样?
发布于 2011-07-14 14:17:58
您可以使用专门的程序- buffer来实现此目的。缓冲区旨在使写入方持续忙碌,以便它可以在写入磁带驱动器时进行流式处理,但您也可以将其用于其他目的。内部缓冲区是一对通过共享内存中保存的大型循环队列进行通信的进程,因此您的进程将异步工作。如果队列已满,您的读取器进程将被阻塞,而写入器进程将被阻塞-以防队列为空。示例:
bzcat archive.bz2 | buffer -m 16000000 -b 100000 | processing_script | bzip2 > archive_processed.bz2
http://linux.die.net/man/1/buffer
https://stackoverflow.com/questions/6489910
复制相似问题