示例

概览

我们准备了一些示例来帮助您实现您的首个沙盒化 API 库。

您可以在 //sandboxed_api/examples 中找到它们,详情请参阅下文。

hello_sapi

这是一个非常基本的示例,说明了 SAPI 的工作原理。hello_lib.cc 可实现一个函数 AddTwoIntegers(),该函数将沙盒化并在主机代码中调用。

第二个主机代码文件 hello_transacted.cc 演示了 SAPI 事务的用法示例。

总和

一个演示库,用于实现几个 C 函数和一个 C++ 函数。它使用 protobuf 在主机代码和 SAPI 库之间交换数据。

  • 您可以在 sandbox.h 文件中找到沙盒定义。
  • 完成 Bazel 构建后,您可以在 bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h 中找到(自动生成的)函数注解文件(这类文件提供沙盒化函数的原型)。
  • 您可以在 main_sum.cc 中找到使用导出的沙盒化过程的实际执行逻辑(也称为主机代码)。

zlib

这是 zlib 库的演示实现(可正常运行,但目前尚未在生产环境中使用),其中导出了其中部分函数并将其提供给主机代码

主机代码所演示的功能是对从 stdin 到 stdout 的 zlib 流进行解码。

此 SAPI 库不使用 sandbox.h 文件,因为它使用默认的 Sandbox2 政策和嵌入式 SAPI 库,因此无需提供 sapi::Sandbox::GetLibPath()sapi::Sandbox::GetPolicy() 方法。

zlib SAPI 及其主机代码可在 //sapi_sandbox/examples/zlib 中找到。

字符串

此示例演示了如何使用 protobuf 提供字符串 reverseduplication 函数。该还包含一个专用的 sandbox.h,用于提供更严格的沙盒政策。

Host Code 不代表“常规”程序,而是使用单元测试演示 SAPI 库的功能。

此示例中还包含非基于 protobuf 的函数,对这两种方法进行了比较。