Обзор
Мы подготовили несколько примеров, которые помогут вам реализовать вашу первую библиотеку 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, для сравнения двух подходов.