Panoramica
Abbiamo preparato alcuni esempi per aiutarti a implementare la tua prima libreria API con sandbox.
Puoi trovarli in //sandboxed_api/examples, di seguito per spiegazioni dettagliate.
ciao_sapi
Questo è un esempio molto semplice che mostra come funziona SAPI. hello_lib.cc implementa una funzione, AddTwoIntegers()
, che viene sandbox e chiamata nel codice host.
Il secondo file Host Code, hello_transacted.cc, mostra un esempio di utilizzo di Transazioni API.
Somma
Una libreria demo che implementa alcune funzioni C e una singola funzione C++. Utilizza protobufs per lo scambio di dati tra Host Code e la libreria SAPI.
- La definizione della sandbox è disponibile nel file sandbox.h.
- Il file di annotazione delle funzioni (generato automaticamente) (un file che fornisce prototipi di funzioni con sandbox) può essere trovato in
bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h
dopo una build Bazel. - La logica di esecuzione effettiva (ovvero il codice host) che utilizza le procedure con sandbox esportate si trova in main_sum.cc.
zlib
Si tratta di un'implementazione demo (funzionale, ma attualmente non utilizzata in produzione) per la libreria zlib, che esporta alcune delle sue funzioni e le rende disponibili nel codice host.
La funzionalità comprovata del codice host è la decodifica degli stream zlib da stdin a stdout.
Questa libreria SAPI non utilizza il file sandbox.h
, in quanto utilizza il criterio Sandbox2 predefinito e una libreria SAPI incorporata, quindi non è necessario fornire il metodo sapi::Sandbox::GetLibPath()
o sapi::Sandbox::GetPolicy()
.
La SAPI di zlib è disponibile in //sapi_sandbox/examples/zlib, insieme al relativo Codice host.
stringa
Questo esempio mostra l'uso dei protobuf per fornire una funzione reverse
e duplication
. La libreria contiene anche un file sandbox.h dedicato per fornire un criterio Sandbox più rigido.
Il codice host non rappresenta un programma "normale", ma dimostra la funzionalità della libreria SAPI utilizzando i test delle unità.
In questo esempio, sono incluse anche le funzioni non basate sul protobuf per fornire un confronto tra i due approcci.