Примеры

Обзор

Мы подготовили несколько примеров, которые помогут вам реализовать вашу первую библиотеку API Sandboxed.

Вы можете найти их в //sandboxed_api/examples , подробные объяснения см. ниже.

hello_sapi

Это очень простой пример, иллюстрирующий работу SAPI. hello_lib.cc реализует одну функцию, AddTwoIntegers() , которая будет изолирована и вызвана в коде хоста .

Второй файл кода хоста, hello_transacted.cc , демонстрирует пример использования транзакций SAPI .

Сумма

Демонстрационная библиотека, реализующая несколько функций C и одну функцию C++ . Она использует Protobuf для обмена данными между кодом хоста и библиотекой SAPI.

  • Определение песочницы можно найти в файле sandbox.h .
  • Файл аннотаций функций (сгенерированный автоматически) (файл, предоставляющий прототипы изолированных функций) можно найти в bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h после сборки Bazel.
  • Фактическую логику выполнения (т. н. код хоста), которая использует экспортированные изолированные процедуры, можно найти в main_sum.cc .

zlib

Это демонстрационная реализация (функциональная, но в настоящее время не используемая в производстве) для библиотеки zlib, экспортирующая некоторые ее функции и делающая их доступными для кода хоста .

Продемонстрированная функциональность Host Code — декодирование потоков zlib из stdin в stdout.

Эта библиотека SAPI не использует файл sandbox.h , поскольку она использует политику Sandbox2 по умолчанию и встроенную библиотеку SAPI, поэтому нет необходимости предоставлять метод sapi::Sandbox::GetLibPath() или sapi::Sandbox::GetPolicy() .

SAPI zlib можно найти в //sapi_sandbox/examples/zlib вместе с его кодом хоста .

струнный

В этом примере демонстрируется использование protobufs для реализации функции reverse и duplication строк. Библиотека также содержит специальный файл sandbox.h для реализации более строгой политики песочницы.

Хост-код не представляет собой «обычную» программу, вместо этого он демонстрирует функциональность библиотеки SAPI с помощью модульных тестов.

В этом примере также включены функции, не основанные на Protobuf, для сравнения двух подходов.