Przegląd
Przygotowaliśmy kilka przykładów, które pomogą Ci w implementacji pierwszej biblioteki interfejsu Sandboxed API.
Znajdziesz je w folderze //sandboxed_api/examples. Szczegółowe wyjaśnienia znajdziesz poniżej.
hello_sapi
To bardzo prosty przykład, który pokazuje, jak działa SAPI. Plik hello_lib.cc zawiera jedną funkcję AddTwoIntegers()
, która będzie działać w trybie piaskownicy i będzie wywoływana w kodzie hosta.
Drugi plik kodu hosta, hello_transacted.cc, zawiera przykład użycia transakcji SAPI.
Suma
Biblioteka demonstracyjna implementująca kilka funkcji C i jedną funkcję C++. Do wymiany danych między kodem hosta a biblioteką SAPI używa protokołów protobuf.
- Definicję piaskownicy znajdziesz w pliku sandbox.h.
- Plik adnotacji funkcji (generowany automatycznie plik zawierający prototypy funkcji w piaskownicy) można znaleźć w
bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h
po kompilacji Bazel. - Rzeczywista logika wykonania (czyli kod hosta), która korzysta z wyeksportowanych procedur piaskownicy, znajduje się w pliku main_sum.cc.
zlib
Jest to implementacja demonstracyjna (działająca, ale obecnie nieużywana w środowisku produkcyjnym) biblioteki zlib, która eksportuje niektóre z jej funkcji i udostępnia je kodowi hosta.
Demonstrowana funkcjonalność kodu hosta to dekodowanie strumieni zlib ze standardowego wejścia na standardowe wyjście.
Ta biblioteka SAPI nie używa pliku sandbox.h
, ponieważ korzysta z domyślnych zasad Sandbox2 i wbudowanej biblioteki SAPI, więc nie musisz podawać metody sapi::Sandbox::GetLibPath()
ani sapi::Sandbox::GetPolicy()
.
Interfejs zlib SAPI znajdziesz w //sapi_sandbox/examples/zlib wraz z kodem hosta.
stringop
Ten przykład pokazuje, jak za pomocą buforów protokołu udostępnić ciąg znaków reverse
i funkcję duplication
. Biblioteka zawiera też dedykowany plik
sandbox.h, który zapewnia bardziej rygorystyczne zasady piaskownicy.
Kod hosta nie jest „normalnym” programem, ale demonstruje funkcjonalność biblioteki SAPI za pomocą testów jednostkowych.
W tym przykładzie uwzględniono też funkcje oparte na protokole innym niż protobuf, aby umożliwić porównanie obu podejść.