Opis
Przygotowaliśmy kilka przykładów, które pomogą Ci wdrożyć pierwszą bibliotekę interfejsów API w trybie piaskownicy.
Znajdziesz je w sekcji //sandboxed_api/examples. Szczegółowe objaśnienia znajdziesz poniżej.
hello_sapi
To bardzo podstawowy przykład, który ilustruje działanie interfejsu SAPI. Biblioteka hello_lib.cc implementuje 1 funkcję AddTwoIntegers()
, która jest uruchamiana w piaskownicy i wywoływana w kodzie hosta.
Drugi plik z kodem hosta, hello_transacted.cc, przedstawia przykład użycia transakcji SAPI.
Suma
Biblioteka demonstracyjna z implementacją kilku funkcji C i jednej funkcji C++. Wykorzystuje protobufy do wymiany danych między kodem hosta a biblioteką SAPI.
- Definicję piaskownicy znajdziesz w pliku sandbox.h.
- (generowany automatycznie) plik adnotacji funkcji (plik zawierający prototypy funkcji piaskownicy) będzie można znaleźć w
bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h
po kompilacji w Bazelu. - Prawdziwą logikę wykonywania (kod hosta), która wykorzystuje wyeksportowane procedury w trybie piaskownicy, można znaleźć w pliku main_sum.cc.
zlib
To jest implementacja demonstracyjna biblioteki zlib, która działa, ale nie jest obecnie wykorzystywana w wersji produkcyjnej. Służy do eksportowania niektórych jej funkcji i udostępniania ich w kodzie hosta.
Zademonstrowana funkcja kodu hosta to dekodowanie strumieni zlib ze stdin do stdout.
Ta biblioteka SAPI nie korzysta z pliku sandbox.h
, ponieważ korzysta z domyślnej zasady Sandbox2 i osadzonej biblioteki SAPI, więc nie trzeba podawać metody sapi::Sandbox::GetLibPath()
ani sapi::Sandbox::GetPolicy()
.
Pakiet Zlib SAPI można znaleźć w katalogu //sapi_sandbox/examples/zlib wraz z kodem hosta.
stringop
Ten przykład pokazuje użycie protobufów do podania funkcji reverse
i duplication
w postaci ciągu znaków. Biblioteka zawiera też specjalny plik sandbox.h, aby zapewnić bardziej rygorystyczne zasady piaskownicy.
Kod hosta nie reprezentuje „normalnego” programu, tylko obrazuje funkcjonalność biblioteki SAPI za pomocą testów jednostkowych.
W tym przykładzie uwzględniono też funkcje inne niż protobuf, które pozwalają porównać oba podejścia.