我有这个用 C 语言编写的外部应用程序,它在命令行上调用,如下所示:
app [options] <metadata file> < <input file> > <output file>
元数据基本上是一个文本字符串,输入和输出数据基本上是表格文本。
我想在 Ruby 的紧密循环中运行这个应用程序。我怎样才能最有效地做到这一点?我想将输入和输出数据保存在内存中,并且我想避免每次循环时将元数据写入磁盘以避免磁盘 IO 开销——这似乎与 popen/popen3 解决方案相冲突。
如果您可以访问 C 代码,那么很容易重新连接它以从 STDIN 获取其输入并将其传递给 JSON 字符串以使其收集所需的元数据和输入。输出可以保持现在的任何格式,或者如果需要也可以是 JSON。
如果您无权访问代码,您将不得不在该应用程序的限制范围内工作,这意味着从磁盘读取。您可以尝试使用输入和输出文件的管道或 Unix 套接字来欺骗应用程序,但我怀疑它可能仍会在途中作为临时缓冲区或缓存撞到磁盘的某个地方。
我认为您最好的选择是在 superuser.com 上询问如何欺骗应用程序从非磁盘文件中读取其输入和元数据。
另一个想法是,如果您有 C 应用程序的代码,您可以从 Ruby 和 C 代码读取/写入内存缓存存储,这将为您提供非常快速的 I/O。