c - 摆脱基于文件的通信

标签 c linux memory file-io

我必须使用两个通过基于文件的接口(interface)进行通信的 C 程序。也就是说,它们每个都有一个主循环,它轮询三个或四个文件(fopen、fscanf),对其读取的内容使用react,并最终对文件 (fprintf) 进行自己的更改以供其他进程读取。

现在我必须将这两个程序压缩成一个程序,对程序逻辑和一般代码进行最少的更改。然而,主要是出于美学原因,我应该用内存中的东西替换基于文件的通信。

我可以想象一些 hacky 的方法来完成这个,但我相信 stackoverflow 会给我一个漂亮的解决方案的提示 :)

最佳答案

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

关于c - 摆脱基于文件的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421378/

相关文章:

c - C 中使用数组、入栈、弹出和显示的堆栈实现

linux - Linux下的动态内存管理

java - 从内存读取和从磁盘读取一样吗?

linux - 如何使用带有多个分隔符的 IFS?

linux - Linux 功能如何与零/非零 UID 相关?

java - java中的数组实际上是顺序内存数据结构吗?或物理顺序?

c++ - 如何在 CLion 中编译子目录文件?

c - 隐式函数声明警告

c - 将字符串分配给C中结构中的元素

linux - egrep 两个相同的数字和两个相同的字母 n 次