有没有办法在shell中创建非阻塞/异步命名管道或类似的东西?因此,程序可以在其中放置行,这些行将保持内存,并且当某些程序可以从管道读取一些行时,同时留下未在fifo中读取的行吗?程序也很有可能在同一时间写入和阅读到这个FIFO。起初,虽然也许这可以使用文件来完成,但是在搜索网页之后,似乎没有什么好处可以来自文件同时读取和写入的事实。命名管道几乎可以工作,只是有两个问题:第一,如果在另一端没有人,则阻止读/写;第二,即使我让写入被阻塞,并设置两个进程写入管道,而没有人读取,通过尝试在每个进程中写入一行,然后尝试head -n 1 <fifo>
我只需要一行,但两个写入过程都会终止,而第二行会丢失。有什么建议么?shell/filesystem中的非阻塞/异步FIFO /命名管道?
编辑:也许一些中间程序可以用来帮助这个,作为作家和读者之间的中介?
你可以做类似'的mkfs的/ dev/RAM1 1048576'(或更大的数字,如果你想),并安装'的/ dev/ram1'任何地方即可。这可能与您可以获得的“非阻塞”接近。当然,默认情况下,它根本不是非阻塞的,只是速度非常快(但默认情况下,命名管道也不会)。非阻塞操作是程序需要在文件描述符上设置的操作。 – Damon
我虽然关于这个选项,但在tmpfs或类似文件中创建文件,但是同时又一次写入和读取的问题依然存在。更像是自文件以来的写作和写作。一个程序写入文件结尾,另一个从头读取一些信息,现在需要删除第一行,所以写在最后和删除在同一时间,我找不到解决方案,我会用这个。 – morphles
很难(如果不是不可能的话)在不编写程序的情况下做这样的事情。可能最重要的工作:重命名是原子的,所以每个生产者可以将每个单独的任务写入单独的临时文件,关闭文件并根据某种“众所周知的”模式对其进行重命名。每个消费者可以将下一个文件重命名为随机文件(以便其他消费者不会选择它),读取内容并删除文件。虽然这只能在每个任务级别上(无论生产者是否作为一个单元编写),而不是按行级别。 – Damon