2016-04-21 67 views
0

我想使用SQLite在文件中存储一些元数据信息。这个文件已经被mmap了。我想要做的就是创建一个SQLite DB,传入一个char *来告诉它在哪里制作数据库,而不是让它自己分配。这可以做到吗?用于内存数据库的SQLite文档只是说使用“:memory:”,并且数据库将在进程结束时被销毁,而不会指示如何使用已存在的数据或将其保留。如何在特定地址创建SQLite内存数据库

如果没有,Linux上有哪些解决方法?是否存在“反向”mmap,因此我可以将地址映射到新文件? (因此/ foo会成为/ bar的一部分视图)

回答

1

内存数据库只是其页缓存未保存到磁盘的数据库。

没有访问这些页面的机制。

您唯一的选择就是实现您自己的VFS将文件访问重定向到该文件的正确部分。

+0

“在 - 内存数据库只是其页面缓存不保存到磁盘的数据库。“这必须特别针对SQLite内存数据库,因为它通常不适用于内存数据库系统。 –

1

我不是一个SQLite的专家,但好像你在这里可以使用这些信息来使用你自己的分配器,并控制内存位置处的SQLite创建内存数据库:https://www.sqlite.org/c3ref/mem_methods.html

+0

但是你不知道什么分配用于什么目的。 –

+0

重要吗?如果你的目标是控制SQLite使用的内存(即知道/控制IMDB创建的内存地址),那么看起来就是这样。也许我错过了什么...... –

+0

我甚至不介意在磁盘上创建它。但我需要从记忆中打开它。看起来像VFS是要走的路。 – MichaelGG

相关问题