דוגמאות

סקירה כללית

הכנו כמה דוגמאות שיעזרו לכם להטמיע את ספריית Sandboxed API הראשונה שלכם.

אפשר למצוא אותם בתיקייה //sandboxed_api/examples. הסברים מפורטים מופיעים בהמשך.

hello_sapi

זו דוגמה בסיסית מאוד שממחישה איך SAPI עובד. הקובץ hello_lib.cc מטמיע פונקציה אחת, AddTwoIntegers(), שתפעל בארגז חול ותופעל בקוד המארח.

בקובץ השני של קוד המארח, hello_transacted.cc, מוצגת דוגמה לשימוש ב-SAPI Transactions.

סכום

ספריית הדגמה שמטמיעה כמה פונקציות של C ופונקציה אחת של C++‎. היא משתמשת ב-protobufs כדי להחליף נתונים בין קוד המארח לבין ספריית SAPI.

  • ההגדרה של ארגז החול מופיעה בקובץ sandbox.h.
  • אחרי בניית Bazel, אפשר למצוא את קובץ ההערות של הפונקציה (שנוצר אוטומטית, ומספק אבות-טיפוס של פונקציות בסביבת ארגז חול) בנתיב bazel-out/genfiles/sandboxed_api/examples/sum/lib/sum-sapi.sapi.h.
  • את לוגיקת הביצוע בפועל (שנקראת גם קוד המארח) שמשתמשת בפרוצדורות המבודדות שיוצאו אפשר למצוא בקובץ main_sum.cc.

zlib

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

הפונקציונליות שמוצגת בקוד המארח היא פענוח של זרמי zlib מ-stdin ל-stdout.

ספריית ה-SAPI הזו לא משתמשת בקובץ sandbox.h, כי היא משתמשת במדיניות ברירת המחדל של Sandbox2 ובספריית SAPI מוטמעת, ולכן אין צורך לספק את sapi::Sandbox::GetLibPath() או את השיטה sapi::Sandbox::GetPolicy().

‫SAPI של zlib נמצא בכתובת //sapi_sandbox/examples/zlib, יחד עם קוד המארח שלו.

stringop

בדוגמה הזו מוצג שימוש ב-protobuf כדי לספק מחרוזת reverse ופונקציה duplication. הספרייה כוללת גם את הקובץ הייעודי sandbox.h, שמספק מדיניות Sandbox מחמירה יותר.

הקוד של המארח לא מייצג תוכנית 'רגילה', אלא מדגים את הפונקציונליות של ספריית SAPI באמצעות בדיקות יחידה.

בדוגמה הזו, הפונקציות שלא מבוססות על protobuf כלולות גם כדי לספק השוואה בין שתי הגישות.