Примеры

Обзор

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

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

привет_сапи

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

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

Сумма

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

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

zlib

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

Демонстрируемая функциональность хост-кода — декодирование потоков zlib со стандартного ввода на стандартный вывод.

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

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

стрингоп

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

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

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