c++ - sqlite3数据库文件可以删除,仍然可以访问

标签 c++ c sqlite

我在我的 RTOS 系统中使用 SQLite3。我已经设置了配置,以便它会为每个事务锁定。在我的系统上,我最终在驱动器上有一个文件

“SQLDB.db”

当有交易时,如果你足够快,通常可以看到一个锁文件。 “SQLDB.db.锁”。

让我抓狂的是,当我删除“SQLDB.db”时,我仍然可以从数据库中执行 SELECT,但我无法插入。这不是缓存问题,因为我可以在多个表上进行选择(在重新启动系统之前我没有对其进行任何操作)。

所以我的问题是,数据库文件是否被缓存?它保存在某个地方的RAM中吗?怎么可能查询这个幽灵数据库?

最佳答案

在 Unix 中,当您删除一个文件时,目录条目会立即被删除,但实际的文件数据只有在所有打开的文件句柄都已关闭后才会被删除。

显然,您的 RTOS 表现相同。

关于c++ - sqlite3数据库文件可以删除,仍然可以访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50063878/

相关文章:

mysql - Rails/Sqlite 3 - 在页面上显示表格数据

ruby-on-rails - Rails + Angular + sqlite3部署

c++ - 多态性:这种(可能密集的)使用 static_cast 是致命的吗?

c++ - 使用 C++14 编译器而不是 C++11 进行编译时,性能会得到提升吗?

c - 为什么我得到 -0 而不是 0?

C - 修改传递给函数的指针的地址

sql - sqlite的聚合函数

c++ - 什么是 move 语义?

c++ - 如何在 QTabWidget 中为选项卡设置布局?

c - C中的内存溢出混淆