4. הפעלת ארגז החול

בקטעים הקודמים, הכנתם את הסביבה, המדיניות, המפעיל וה-Sandboxee בארגז החול. השלב הבא הוא יצירת האובייקט Sandbox2 והרצתו.

הרצה באופן סינכרוני

ארגז החול יכול לפעול באופן סינכרוני, כך שהוא ייחסם עד לקבלת תוצאה. קטע הקוד הבא מדגים את יצירת האובייקט Sandbox2 ואת הביצוע הסינכרוני שלו. דוגמה מפורטת יותר זמינה במאמר סטטי.

#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();

הפעלה באופן אסינכרוני

אפשר גם להפעיל את Sandbox באופן אסינכרוני, כך לא לחסום עד שתתקבל תוצאה. האפשרות הזו שימושית, למשל, בתקשורת עם Sandboxee. קטע הקוד הבא מדגים את התרחיש לדוגמה הזה. דוגמאות מפורטות יותר זמינות ב-crc4 ובכלי.

#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();