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