让一个程序向另一个程序发送数据流有两种非常简单的方法:
O_APPEND
,消费者只是在方便时读取可用的新数据。这不需要任何同步(只要磁盘空间可用),但Unix文件只支持截断,而不是在开头,因此它将填满磁盘,直到两个程序都退出。是否有一种简单的方法可以同时使用它,数据存储在磁盘上直到它被读取,然后释放?显然,程序可以通过数据库服务器或类似的东西进行通信,而不会出现这个问题,但我正在寻找能够与普通Unix管道集成良好的东西。
答案 0 :(得分:3)
一种相对简单的手卷解决方案。
你可以让制作人创建文件并继续写,直到它达到一定大小/数量的记录,无论你的应用程序是什么。然后,生产者关闭文件并使用商定的命名算法启动一个新文件。
消费者从文件中读取新记录,然后在达到约定的最大大小时关闭并取消链接,然后打开下一个。
答案 1 :(得分:1)
如果您的数据可以拆分为某种块或事务,您可以使用序列号的文件方法。数据生成器将在outfile.1
中存储第一兆字节的数据,在outfile.2
中存储下一个数据。消费者可以按顺序读取文件并在读取时删除它们。因此,您可以获得类似于第二种方法的东西,并在此过程中进行清理。
您应该将所有这些包装在库中,以便从应用程序的角度来看, 是某种管道。
答案 2 :(得分:0)
您应该阅读一些documentation on socat。您可以使用它来弥合tcp套接字,fifo文件,管道,stdio和其他文件之间的差距。
如果你感到懒惰,那就有some nice examples个有用的命令。
答案 3 :(得分:0)
我不知道任何事情,但编写一个以目录作为参数(或使用$ TMPDIR)的小实用程序应该不会太难;并且,使用select / poll在从stdin读取,分页到一系列临时文件和写入stdout之间进行多路复用。