有没有办法在shell中创建非阻塞/异步命名管道或类似的东西?所以程序可以在其中放置行,这些行将保留在ram中,并且当某个程序可以从管道读取一些行时,同时留下它没有在fifo中读取的内容?程序也很可能同时写入和读取这个fifo。起初我可能这可能是使用文件来完成的,但是在搜索了一下web之后,似乎没有什么好处可以来自同时读取和写入文件的事实。命名管道几乎可以工作,只有两个问题:首先,如果在另一端没有人阻止读/写,第二,即使我让写入被阻止并设置两个进程写入管道而没有人正在读取,通过尝试用每个进程写一行,然后尝试head -n 1 <fifo>
我只需要一行,但两个写入进程终止,第二行丢失。有什么建议?
编辑:也许可以使用一些中级程序来帮助解决这个问题,就像作家和读者之间的中介一样?
答案 0 :(得分:5)
您可以使用特殊程序 - 缓冲区。缓冲区旨在尝试让编写器端保持连续忙碌,以便在写入磁带驱动器时可以流式传输,但您可以将其用于其他目的。内部缓冲区是通过共享内存中保存的大型循环队列进行通信的一对进程,因此您的进程将异步工作。如果队列已满并且编写进程(如果队列为空),将阻止您的读者进程。例如:
bzcat archive.bz2 | buffer -m 16000000 -b 100000 | processing_script | bzip2&gt; archive_processed.bz2