4. Exécuter le bac à sable

Dans les sections précédentes, vous avez préparé l'environnement de bac à sable, la stratégie, l'exécuteur et le bac à sable. L'étape suivante consiste à créer l'objet Sandbox2 et à l'exécuter.

Exécuter de manière synchrone

Le bac à sable peut s'exécuter de manière synchrone, bloquant ainsi l'opération jusqu'à l'obtention d'un résultat. L'extrait de code ci-dessous illustre l'instanciation de l'objet Sandbox2 et son exécution synchrone. Pour obtenir un exemple plus détaillé, consultez l'article static.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
sandbox2::Result result = s2.Run();  // Synchronous
LOG(INFO) << "Result of sandbox execution: " << result.ToString();

Exécuter de manière asynchrone

Vous pouvez également exécuter le bac à sable de manière asynchrone, et donc sans le bloquer tant qu'il n'y a pas de résultat. Cela s'avère utile, par exemple, pour communiquer avec le bac à sable. L'extrait de code ci-dessous illustre ce cas d'utilisation. Pour obtenir des exemples plus détaillés, consultez crc4 et tool.

#include "sandboxed_api/sandbox2/sandbox2.h"

sandbox2::Sandbox2 s2(std::move(executor), std::move(policy));
if (s2.RunAsync()) {
  // Communicate with sandboxee, use s2.Kill() to kill it if needed
  // ...
}
Sandbox2::Result result = s2.AwaitResult();
LOG(INFO) << "Final execution status: " << result.ToString();