摆脱基于文件的通信

nis*_*isc 3 c linux memory file-io

我必须使用两个通过基于文件的界面进行通信的C程序.也就是说,它们中的每一个都有一个主循环,它轮询三个或四个文件(fopen,fscanf),对它读取的内容作出反应,并最终对文件(fprintf)进行自己的更改,以供另一个进程读取.

现在我必须将这两个程序压缩成一个程序,对程序逻辑和代码进行一般性的改动很少.但是,主要出于审美原因,我应该用内存中的内容替换基于文件的通信.

我可以想象一些hacky方法来实现这一点,但我确信stackoverflow会给我一个漂亮的解决方案的暗示:)

R..*_*R.. 5

既然你标记了这个Linux,我会建议open_memstream.它被添加到POSIX与POSIX 2008,但它已经在基于glibc的Linux系统上使用了很长时间.基本上它允许你FILE *在内存中打开一个实际上是动态增长的缓冲区,因此你不必更改太多代码.这个"文件"是只写的,但你可以简单地使用sscanf而不是fscanf在缓冲区上读取或使用fmemopen(它没有动态增长语义,但是从内存缓冲区读取非常方便).