c - 其他程序可以访问内存中的编程数据库

标签 c shared-memory mmap

我目前正在 64 位 Linux 平台上用 C(程序 A)编写网络数据使用监视器。作为数据包嗅探器,没有太多时间可以在不冒数据包丢失风险的情况下将数据写入文件或数据库。我可以为此目的使用另一个线程,但我认为一个更简洁的解决方案(如果存在的话)是从另一个 C 程序或理想的 python cgi 脚本(程序 B)访问存储在内存中的数据。这样数据就可以按需提供。内存中的数据将从程序 B 以只读方式访问。这可能吗?如果是这样怎么办?谢谢。

更新:

我发现可以使用 mmap() 将数据存储在内存中,并使用 shmget() 检索数据。我听说有人说 shmget 已经过时了。还有哪些其他选项可用?

要传递的二维数组可以大到 5000x4 int 或 5000x15 char。

posix_ipc作为从 python(程序 B)访问共享内存的一种方式,听起来很有前途。有谁知道这是否适用于在 C(程序 A)中创建的共享内存?

我下载了posix_ipc它有一些非常酷的演示。第一个演示了两个进程使用共享内存相互通信。这两个进程可以是 C 和 Python 的任意组合,并且提供了四个进程中的每一个的源代码。它看起来是处理我正在尝试做的事情的最有效方法,但我还没有时间去玩它。当我这样做时,我会报告。

che 在下面的建议听起来也行得通,我会保留它作为我的 B 计划。

感谢大家的帮助!

最佳答案

Shared memory听起来是在两个 C 程序之间执行此操作的最佳方式,特别是如果第二个程序只读取第一个程序编写的统计信息。

从 Python 获取此内存可能有点复杂,因为它对于这种语言来说有点低级。最简单的方法可能是使用一个 C 程序来访问共享内存并以纯文本形式打印信息,然后从您的 CGI 脚本中调用它。

关于c - 其他程序可以访问内存中的编程数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13037104/

相关文章:

c - Linux:执行手动加载到内存的代码

c - 在两个进程之间共享信号量数组 | Linux C

python - 检查Numpy数组是否存储在共享内存中

c - 内存支持的虚拟文件(反向 MMAP)?

c - mmap函数中的MAP_SHARED和MAP_PRIVATE有什么区别?

c - GAUT HLS工具错误: "No alternatives to process, unable to select best one"

c - 多线程文件搜索

c - 只有某些输入的 C 中的段错误

c++ - 访问共享内存中的数据 C++ POSIX

C - strcmp() 未正常运行