gpt4 book ai didi

berkeley-db - 将 Rust 与 Berkeley DB 连接起来

转载 作者:行者123 更新时间:2023-11-29 07:55:07 31 4
gpt4 key购买 nike

我有一个现有的 C++ 程序,它使用 Berkeley DB 作为存储后端。我想用 Rust 重写它。有没有办法在 Rust 中编写外部函数接口(interface)以使用 Berkeley DB?我找到了教程 Rust Foreign Function Interface , 但对于 BDB 中使用的复杂 C 结构来说,这个例子似乎太简单了;例如,打开一个数据库我需要声明一个 DB 结构并调用 DB->open()。但是我不知道如何使用教程中显示的示例来执行此操作。

有人可以帮忙吗?

最佳答案

好吧,通过查看 BDB 的 C API,我发现它由 C 结构组成,元素指针指向函数。教程中没有解释(这很奇怪),但 Rust 目前支持 pointers to foreign functions . Rust reference manual中也提到了它.

您可以大致根据 db.h 中定义的结构创建所有必需的结构,并且由于 Rust 和 C 结构内存布局相同,您可以将这些结构传入/传出库并期望正确的指针出现在它们中。

例如,您的 DB->open() 调用可能如下所示:

struct DB {
open: extern "C" fn()
}

let db = ... // Get DB from somewhere
(db.open)() // Parentheses around db.open are needed to disambiguate field access

然而,这确实应该包装在某种基于 impl 的接口(interface)中,因为调用外部函数是不安全的操作,并且您不希望您的用户将 unsafe 围绕所有数据库交互。

关于berkeley-db - 将 Rust 与 Berkeley DB 连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094976/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com