חבר'ה בוקר טוב מה שלומכם נדב, שומעים אותי, הכל בסדר? כן. כן, שומעים. טוב, בסדר.
אנחנו בתרגול במערכות הפעלה, ואנו רוצים ככה לדבר על שני דברים. קודם כל, להתחיל איתכם את הנושא של פייל סיסטם קול, בפייל סיסטם, במערכת הקבצים. ואחר מכן לדבר איתכם על המטלה, העליתי לכם מטלה אתמול שעוסקת בעבודה עם כבשים, היא מחולקת לשני חלקים, כבר אחרי השיעור של היום תוכלו לעשות את החלק הראשון, עדיין לא לעשות את החלק השני משום שהחלק השני יהיה הנושאים המתקדמים יותר, ולא סתם נתתי לכם עוד הגשה של קרוב לחודש מהיום, מכיוון שעדיין לא הספקנו לתרגל את כל הנושאים למטלה, אבל החלק הראשון כבר אחרי התגובות של היום תוכלו לרוס עליו. אבל בואו נתחיל מהחומרים. לגבי כל הנושא של כתובת שרת, העליתי לכם כתובת שרת, הבנתי שחלק מהסטודנטים עובדים עם מחשבי מק, אז יש לכם גם את תקודת הטרמינל במק שבמשאותה אפשר להתחבר לשרת.
ואולי חלק מהסטודנטים רוצים להתקין מכונה וירטואלית, אז גם כאן, אלה אצלכם מדריך, מאוד מאוד פשוט, להתקנת מכונה וירטואלית, בכתב, להריס קודות לינוקס, לקמפל כבשים, בשפה C, על לינוקס, להריס אותם, ועוד מאוד. היי, עדיוני שהקובץ וינרר, של המחשבה, נמצא ממדריך התקנה. הוא שוקל 11.2 ג'יגבייט?
מה, פתאום? מה, קובץ התרגול? אתה שומע?
אני שומע ממש חלט. איזה קובץ שוקל 11.2 ג'יגבייט? אני שואל, במדריך להתקנה מכונת וירטואלית, שאלת, יש קובץ... זה כבד, זה כבד, כן.
אה, אוקיי, בסדר, 11 ג'יגבייט. נשמע הגיוני, כי חשבתי שאתה מדבר על התרגולים, כן. נשמע הגיוני.
כי מכונת ויטואלית זה בעצם סימולטור של מערכת הפעלה, ולתוכה אתה טוען אימג'בבקרה שלנו של מערכת הפעלה לינוס, ובום-בום, אז זה אמור לשקול כמה ג'יגות מכובדות, נקרא לזה ככה. אוקיי, בסדר. עכשיו, מי שלא רוצה להתקין את כל הסיפור הזה, יכול גם להתקין ביט-בייזר. הרציתי לכם בשבוע שעבר.
ואני יודע שחלק גדול מכם אפילו למד רשתות תקשורת למעט סטודנט אחד, אם אני זוכר נכון. עשינו כל כך הרבה דברים על הביטוויז ועל הפוטי, אני לא חושב שצריך יותר מזה, אבל מי שרוצה בכל זאת מכונה וירטואלית יש לו אפשרות שכזאת. אוקיי, אז אני רוצה לדבר איתכם על מעט הקבצים, ויש למעשה שיעור שלם שאנחנו מדברים על מבנה מעט הקבצים.
מבנה נ תונים, אני שם את הדבר הזה בצד. בלינוקס יש מערכת הקבצים שנקראת מערכת קבצים מסוג iNode, iNode Index Node, סמטי אינדקס, ובאישות כלל ויותר מאוחר במהלך השמסטר אתם תדברו בהרחבה על מערכת הקבצים. היא שונה ממערכות קבצים של NTFS, או FAT32 של ווינדוס, והיא שונה ממערכת הקבצים של מק, כנראה זה אותה מערכת קבצים של מק במידה מסוימת, כי מק...
יש בה הרבה מין המשותף ללינוקס, והסיסטם קול שאני מקווה להציג לכם היום, קריאות המערכת, אלה מעשה קריאות מערכת שעוסקות במערכת הקבצים של לינוקס. במידה ותנסו להריס אותם, את קריאות המערכת הללו, על מערכת הפעלה אחרת, ברור לכם שזה לא יעבוד. אין בעיה לכתוב את הקוד בווינדוס, או אפילו בוויזיאל סטודיו או על נודפד, אבל לקמפל ולהריס...
תעבירו זה לנינוקס אז המלצה חמה ממני זה להתקין את הביט וייז שמאפשר לכם להעביר קובץ מהמחשב הלוקלי שלכם לשרת המכללה או בכל שירת לינוק שתמחרו או שתעבדו על המכונה הווירטואלית, אז פשוט אפשר לעבוד באופליין ורק שמה לקמפל ולעבוד. אם זאת, בתוך הלינוק זה שגם מעבדי תמלילים מכובדים, יפים, שהם מאוד מאוד נוחים, שגם בהם תוכלו להשתמש, אני יודע שחלק מהסטודנטים העדיתים משתמש בנוטפד, ויזואל סטודיו, ויזואל קוד, ועוד ועוד, אבל ממש לא צורך, זה סך הכל מעבד תמלילים, אוקיי? עכשיו, בואו נראה רשימה של System Course, זה שיעור נורא נורא חשוב, כי אתם תעסקו בדברים הללו בתרגיל, בחלק הראשון שבתרגיל, אז בואו נעבור על זה לפרטי פרטים, יש לי גם דוגמת קוד בהמשך התרגול, שבו אני כך פחות או יותר מסכם את כל מה שלמדנו. ובשארית הזמן נעבור על התרגיל, מה הדרישה בתרגיל, בסדר?
זה לא אמור לקחת יותר מדי. אז, System.Core.Open למעשה פותח פייל דיסקריפטור, רפרנס למעשה, מזהה קובץ, אם תרצו, לקובץ בתוך מערכת הקבצים, בתוך הפייל סיסטם של לינוקס. Open.
זה לא פותח את הקובץ ברמה של בוא נפתח ונראה את הקובץ, זה פשוט פותח... פייד סקריפטור מתאר קובץ שאפשר לזהות אותו באופן חד משמעי על ידי מספר זהות, תכף נראה מהו, כאשר השם של הקובץ אתם מכניסים אותו פה בארגומנט הראשון, ואילו בארגומנט השלישי פלג שמכיר כל מיני פרמטרים שמגדירים את אופן פתיחת הפייד סקריפטור. תכף נדבר על הפרמטרים.
עכשיו, במידה ואתם מעוניינים לפתוח קובץ, בספרייה הלוקלית, משמע מהספרייה שממנה אתם מריצים את הפרוסס, נכון? כולנו יודעים מה זה פרוסס, נכון? מה זה פרוסס?
תהליך. פרוסס זה תוכנית בהרסה, נכון? תוכנית מופעלת, ומה אתה עפה לה? תוכנית שהיא לא מופעלת היא סתם קטע קוד שנמצא בדיסק. פרוסס זה תוכנית מופעלת, היא דורשת משאבים, יש לה מבנה נתונים שמתחזקת כל הפרמטרים עליה ועוד ועוד.
אז כאשר אני מכניס פה רק את שם הקובץ, אז למעשה הקובץ נפתח מהספרייה שממנה מופעל התהליך, הפרוסס. במידה ואני מכניס כאן נתיב אבסולוטי, נתיב אבסולוטי הכוונה היא slash, הוא דירקטורי, הום דירקטורי, יוזר וכן הלאה, הנתיב המלא מה שנקרא, אז אתם יכולים לפתוח גם את הקובץ גם במקום חיסוני, במקום אחר, בתוך מערכת הכבשים. צריך לדבר על הפלג.
הפלג זה למעשה כל קומבינסיה אפשרית של הרשאות, של סוגי קובץ, כמו למשל אני רוצה להקנות הרשאת read, write, execute, append, create, קבצים בינאריים, קבצי טקסט, קבצים סינכרונים ואסינכרונים, יש אפשרות לדבר כזה במערכת, ועוד ועוד, נראה דוגמאות, אבל מה שחשוב להבין זה שחוזר ערך אינדי. מספר שלם. אם המספר השלם הזה הוא מינוס אחד, זה בגלל כך שלא צריכים לפתוח את המטאי הקובץ, את הפאיידס קריפטו. למה זה קורה?
יכול שאני מנסה לפתוח קובץ שלא קיים, יכול שאני מנסה לפתוח קובץ מספרייה שלא קיימת, יכול שאני מנסה לפתוח קובץ שאין להרשאות, יכול שאני מנספיק מקום בדיסק, ועוד כאלה וכאלה סיבות. אני בטוח שבשיעורים אתם למדתם את התפקידים של מערכת ההפעלה, לומדים את זה בדרך כלל בשיעור הראשון. אז נכון שהתפקידים המרכזיים של מערכת ההפעלה הם שניים, א', לנהל את החומרה, מעין עבודת רואה חשבון כזאת, עבודת פנקסנות, שמתחשבנת על המשאבים בחומרה, הפרוסס הזה מקבל את הכתובת הזאת, הפרוסס הזה מקבל את הכתובת הזאת, הוא מקבל את המשאב הזה, הוא מקבל זמן עיבוד.
זה אחד התפקידים של מערכת ההפעלה. התפקיד אחר זה להקנות את הפונקציונליות של המערכת בפני המשתמש. המשתמש יכול לעשות כל מיני פעולות כדי ליהנות מהמערכת, מהחומרה עצמה שהוא רכש. אלה שני תפקידים עיקריים של מערכת ההפעלה. אבל יש למערכת ההפעלה גם תפקידים נוספים, קצת יותר מינוריים, כמו למשל טיפול באירורים, גם בזיהוי של אירורים, error detectors, נקרא לזה ככה.
וגם בהתאוששות או טיפול מסוים באירורים. אירורים ברמת החומרה ואירורים ברמת התוכנה. למה אני אומר לכם את זה?
משום ש-System Call Open מחזיר מינוס אחד, מינוס אחד מעיד על שוגיה. שוגיה הקאג'וטיו אחרת, שאני מנסה לעשות בתוך הקוד, ומה הייתה פעלה מטפלת לנו בזה? אז היא מחזירה לנו מינוס אחד, דרך הקרנל, דרך גרעין המערכת. עם זאת, כאשר אני רוצה להגיד מהי השוגיה, אני צריך להשתמש בספרירת עזר, שנקראת error number נקודה h, אנחנו רואים אותה במהלך השיעור היום, ואז נוכל לא רק להגיד שיש גייה, אלא גם לומר מה יש גייה.
בתרגיל התכנותי, למעשה בכל התרגילים התכנותיים בקורס הזה, אתם לא צריכים להגיד מה יש גייה, למרות שאני משמחה אקבל תשובות שבהן תשתמשו בספרירת העזר הזאת, היא error number. כדי להטריע בפני המשתמש מה השגיאה שקרתה במערכת. בתרגילים התכנותיים אתם נדרשים רק להגיד שקרתה שגיאה כלשהי. מעין הודעה גנרית כזאת, יש איזשהו אירור, להודיע למשתמש קרה משהו, אירור, אחרי זה לשחרר את המשאבים, נניח לשחרר את העקפות הדינמיות, לסגור את הקבצים ועוד ועוד, ולצאת מהתוכנית. בסדר?
בדרישה שלי? למסגרת כל התרגילים, אתם נדרשים רק להודיע שקרה משהו, לטפל בשגיאות, אתם לא חייבים להגיד איזו שגיאה קרתה. מי שרוצה ללכת יותר רחוק, יכול להשתמש בספרייה, שנראה אותה עוד מעט, שבאמצעותה אפשר להגיד גם מה קרה, ועד לקבל פלץ יותר אינפורמטיבי, כלפי המשתמש.
מה שחוזר במידה ואין שגיאה, זה מספר מזהב, מספר מזהב, זה נקרא פייל דסקריפטור, זה כמו מספר הזהות, לא מדובר על הקובץ עצמו, זה ברור לכם שמספר הזהות זה לא הקובץ עצמו, כמו תעודת זהות של בן אדם, נכון? תעודת זהות זה לא הבן אדם עצמו, זה רק הדרך שלנו לזהות אותו. והמספר מזהה הזה הוא מספר שמתאר איזשהו דיסקריפטור, מתאר, דיסקריפטור הוא מתאר, קובץ.
הקובץ נמצא בכלל בהתקן של הדיסק הקשיח. אנחנו, ברמת הקוד, נעבוד רק מהמספר מזהה הזה. נוכל במציאות המספר מזהה לכתוב נתונים מהכובס, לקרוא נתונים מהכובס ועוד ועוד פעולות.
לא נצטרך לעבוד באופן ישיר עם הכובס. למעשה לא נצטרך אפילו לומר באיזה מקום בדיסק הקשיח הכובס נמצא. למה זה קורה? משום שהדרך שלנו לדבר עם הקרנל בתוך מערכת ההפעלה, היא במציאות המספר מזהה זה.
בתוך מערכת ההפעלה יש טבלה ומזהה כובס. בזהים כאלו ואחרים שנפתחו בתוך התהליכים שבתוך מערכת ההפעלה, ובמצואות המספרי מזהים האלה, הקרנל מדבר עם החומרה. אני רק מזכיר לכם שהקרנל זה הליבה של המערכת, החלק במערכת, התוכנית במערכת, או אוסף התוכניות במערכת שמדברות עם החומרה. אנחנו לא מדברים באופן ישיר עם החומרה, אלא מדברים באופן ישיר עם מערכת ההפעלה. וזו הסיבה שאנחנו משתמשים בסיסטם קולס, לא בפונקציות ה-I-level, משום ש...
פונקציות גבוהות יותר הן לא מדברות ישירות עם החומרה או מדברות ישירות עם הקרנל, הן ממומשות באמצעות System Calls או ממומשות על ידי פונקציות. שהן ממומשות על ידי פונקציות ככה לסירוגין עד ל-System Calls. אנחנו בקורס מחות הפעלה רוצים ללמוד איך מעט הפעלה עובדת ולדבר ישירות עם המעט הפעלה, כי זה נותן לנו גם מהירות טובה יותר וגם גמישות גבוהה יותר ואנחנו נעבוד עם System Calls.
ולכן כל הפונקציות שאני מראה לכם בתרגול הזה וגם בתרגולים הבאים, כולן יהיו System Calls. אני לא אשתמש בפרינט F, בסקל F, ב-STR Compare, כל מיני פעולות כאלה שאין לו System Calls. בסדר? אם זאת בתרגולים, בתרגילים, אני אאפשר בחלק מהם להשתמש בפונקציות עזר שאין לו System Call.
אבל בחלק הראשון של המטלה הראשונה, אנחנו מדבר על זה כבר היום, אני רוצה שתשתמשו רק ב-System Calls. לא להשתמש בסקנים, בפרינטים, ב-STR-Compare, STR-Cut, כל הדברים האלו, בספריות כאלו ואחרות, כי לפחות בחלק האנושי הם רוצים שתעבדו עם סיסטם קורסטי שלמדנו. מה חוזר בעצם מהאופן? המזהה. מה זה המזהה הזה?
המזהה הזה זה מספר ייחודי ברמת הפרוסס, שבמצורתו אני יכול לדבר עם הקורס, לכתוב ולקרוא לקורס. חשוב לומר כמה דברים. אפשר לפסוח...
כמה מזהים לאותו הקובץ, אוקיי? הדיוויס הוא אחד, אבל כמה מזהים, כלומר כמה רפרנסים לאותו הקובץ, אין מניעה לעשות דבר כזה. בואו נתחיל מזה.
דבר שני, המזהה הוא לוקלי ברמת הפרוסס. בשיעור אתם למדתם מבנה נתונים שנקרא PCB, מוכר לכם המושג הזה? PCB? באנגלית Process Control Block, בטוח למדתם, אוקיי?
חד משמעית. PCB זה בעצם טיפוס נתונים, מבנה נתונים בתוך מערכת ההפעלה, שמתחזק את כל מה שמערכת ההפעלה צריכה לדעת על פרוסס. על כל אחד מן הפרוססים יש PCB בשלו. בתוך ה-PCB ברמה הלוקלית, יש וקטור של פייל דסקריפטורים, אוקיי?
כלומר, לכל פרוסס יש רשימה של מזהים שנפתחו בתוך הפרוסס. אז אין בעיה שבפרוססים שונים נפתח מזהים, אפילו לאותו כובע, ואפילו שהמטברים יהיו זהים, כי המזהה הזה הוא ייחודי בתוך הפרוסס עצמו. אוקיי, בואו נראה דוגמה, למשל. אני מעוניין לפתוח פיידסקריפטור לקובץ דוגמה 1.txt, אני לא כתבתי כאן נתים מלא ולכן הכוונה היא לקובץ דוגמה 1.txt מהספרייה הלוקלית, שממנה אני מפעיל את הפרוסס, ואני פותח את הקובץ הזה עם הרשעת read-only. עכשיו, מה זה הדבר הזה?
מה זה הקבוע הזה? קודם כל, הקבוע הזה זה סך הכל דיפיינים, יש רשימה של דיפיינים, שמוגדרים בתוך הספרייה של הסיסטם קולסט. יש הפריעה לסיסטם קולס, יש רשימה של כמה עשרות דיפיינים, כאשר קולד דיפיין מגדיר משהו אחר שאני רוצה לעשות. אני רוצה לפתוח לכתיבה, אני רוצה לפתוח לכתיבה ולקריאה, אני רוצה לפתוח כובע סיכרוני, אסיכרוני, כל מיני דברים מן הסוג הזה.
תרף אנחנו נכנס למדריך הפורמלי של לינוקס, נראה שבאמת יש הרבה דברים. מה שחשוב שתזכרו, זה שיש אפשרות לפתוח כובע במגוון וריאציות, וקולד דיפיין... זה סך הכל מספר, אל תשכחו כי זה סך הכל אינטר, זה 32 ביטים. הוא פשוט מדליק ומחווה ביטים, כאשר לכל ביט יש תפקיד אחר, זה ממש עבודה ברמת ה-beatwise, אוקיי? במידה שהצלחתי לפתוח את הקובץ הזה לקריאה, אז מן הסתם, מתוך הפיילדס קריטורי המספר, המספר בדרך כלל במרבית המערכות הפעלה, זה מספר בין 4 עד 6 ספרות, אוקיי?
4 עד 6 ספרות, שזה מספר מספיק רחב. תחום מספיק גדול בכדי לייסג את כל הפיימס קריפטורים הפוטנציאליים עבור כל פרוסס, ובמידה וחזר מינוס אחד, יש קשל, אוקיי? צריך לבדוק, בכל התרגילים תבדקו האם יש קשל, האם חזר מינוס אחד, אם כן תטרירו, תסגרו את המשאבים, ותסעו מהתוכנית.
מה קורה כאשר אני רוצה לעשות כמה דברים? למשל, אני רוצה לפתוח קורס עם הרשעת רייט, שתהיה לי קשרות לכתוב עליו, אבל אני רוצה גם לייסר אותו. נניח והכובס הזה לא קיים, אני רוצה לבנות אותו.
הדרך לעשות את זה זה על ידי שימוק באופרטורים של אור בביטוויז. הרי מה זה אור בביטוויז? אתם למדתם עבודה עם ביטים?
למדתם בקורס קודם? כן, למדתי. למדת?
מעולה. מי שלא זוכר, אני מזכיר, לאבדים מאור כפול, שזה אור בוליאני, אור יחיד זה פשוט... עבודה עם ביטים, למשל, עם הפלג הזה, נניח אני לא חושב שלוחים לשני ביטים, אני אכתוב למשל ב-100, והפלג הזה זה 010, אז האור ביניהם יפיק לנו את 110. כי 1 אור 0 זה 1, 0 אור 1 זה 1, כלומר אני עושה ייחוד, או במילים אחרות, הביט בתוצאה של ידלוק הוא ביט שלפחות דלוק, או באגף שמאל או באגף ימין של האור. וככה אני יכול בעצם לאחד שתי הרשאות, שלוש הרשאות או חמישים הרשאות שאני מעוניין. עכשיו, איפה נמצא את כל טבלת הדפיינים הללו, של כל הרשאות שאני יכול לשים על קורס?
אז יש מדריך, מדריך פורמלי, כדאי לכם להשתמש באתר הזה, זה אתר שמשתמשים בו בכל מיני היבטים, man7, זה כמה man7.org, אני פותח אותו. אוקיי? חולי, מלסבן.אור, תכף אתם תראו, אתם רואים את האתר? אז זה האתר, מלסבן, הוא יש לו מדריך לכל מה שקשור ללינוקס, מפקודות, והסיסטם כל, וכל הנוסף של הרשות, הכל, הכל ברמה פירוט מאוד גבוהה.
אז, תעמידו כמו, אתם עושים מעצבים מוחדורים, ואתם עושים דקות מה שעמד. אתם צריכים לעשות כמובן אין כלו בספריית הסיסטמקול, וכאן יש לכם תיאור של כל הדברים שאפשר לעשות עם אופן, ולמטה יש לכם את כל ההרשאות, את כל הפלגים, הרשאת הפרד, פתיחה של קובץ בצורה אסינכרונית, סינכרונית, קריייט, חבר'ה, זה באמת כמות מאוד מאו ד גדולה של אפשרויות. אתם לא צריכים לשנן את הכל, כן, אתם לא צריכים לשנן בכלל, מה שאתם צריכים לעשות זה על פי צורך. למשל אם בתרגיל אני מבקש לבקש מה משתמש שמות שני קבצים ולפתוח אותם עם הרשאת ריד, תיכנסו למדריך הזה, למעשה אתם יכולים להיכנס גם לכל מדריך אחר, ולראות איך אתם פותחים מרשאת ריד, במקרה ריד מופיע לכם גם פה, הנה, זה הרשאת ריד אונלי.
אם אתם רוצים גם ריד וגם רייט, תעשו אור ביניהם, אם אתם רוצים גם ליישר את הקורת, תעשו אור גם עם קריאת, אין מניעה לעשות הרבה אורים בדרך. עכשיו שימו לב למשהו מעניין, אם אני פותח קובץ קיים ואני אומר שיש לי הרשעת ריד עליו, ואילו במערכת ההפעלה לקובץ אין הרשעת ריד, אתם זוכרים שבשבוע שעבר עשינו קודות של change mode, לתת הרשעות, לתת הרשעות, יש הבדל בין הרשעות במערכת ההפעלה לבין הרשעות ברמת הפרוסס, אם ההרשעה ברמת הפרוסס... המתבקשת בשגרת האופן היא הרשאה שהיא מתנגשת עם ההרשאה במערכת ההפעלה, ההרשאה במערכת ההפעלה גוברת, בסדר?
למשל, אם אני מנסה לפתוח את דוגמה 1.txt עם הרשאת read, אבל במערכת ההפעלה אין לי כמפעיל הפרוסס הרשאה של read, אני אקבל תוסעה של מינוס 1, exception, בסדר? כלומר, ההרשאות שאני נותן ברמת הפרוסס, הן יכולות רק להחמיר את ההרשאות במערכת ההפעלה, ולא להקל על ההרשאות במערכת ההפעלה. אם אני מקל על ההרשאות דרך מערכת ההפעלה, מערכת ההפעלה גוברת ולכן חוזר לי מינוס אחד. חבר'ה, זה ברור?
כן? כן. שימו לב שההרשאות שאני מקבל פה, זה רק למען העבודה עם הקובץ בתוך הפרוסס. שתהיה ברור, זה לא שעכשיו אני מנסה לעשות משהו מתוך מעלת הפעלה, מעלת הפעלה זה משהו אחר, שאין דמות ומשנה את הערך. למרות כל מה שאמרתי, אם אתם מייסרים קובץ, אם אתם נותנים לקובץ הרשעת קריאת, ובאמת המעלת הפעלה נתנה לכם לייסר את הקובץ, אז אתם אוטומטית הופכים להיות בעלי הקובץ.
ואני מזכיר לכם שבתור בעלי הקובץ, יש לכם אפשרות להחליט מהן ההרשעות במעלת הפעלה. כי בעלי הקובץ... הם בעלים של הרשאות, יש לנו את ההרשאות, נכון?
ולכן, במידה, ואתם פותחים פה עם הפלג, את הרשאת קריאה, ומהס הפעלה נותנת לכם את התשורות ל-10 קובץ, אז אתם מקבלים פה ארגומן שלישי, שבו אתם יכולים להחליט, מה יהיו ההרשאות של הקובץ, במעמד מערכת ההפעלה. איך זה נראה? בואו רק אתן לכם דוגמה מפה.
שככה תראו גם בדוגמה רלוונטית, איפה זה היה, הנה פה, אתם רואים פה למשל, אתם סביבים לב, פתחתי קורס בדוגמת 2.txt, עם הרשת create, וread write, כלומר אנחנו יכולים לעשר, לכתוב ולקרוא, מכיוון שאני עכשיו הקריאיטור של הקורס, אז למעשה אני יכול לקבוע מה יהיה הרשעה במערכת ההפעלה. אז אני כותב כאן הרשעה 466. 4 זה 1, 0, 0. 6 זה 1, 1, 0 בבינארי. ו-6 עוד הפעם זה 1, 1, 0. המשמעות היא שאני פותח את הקובץ דוגמה 2, אני מייצר אותו מתוך מערכת ההפעלה, כך שלאיוזר, שזה אני, יש הרשעת read, end, write, end, execute, לגרופ שלי. יש read, יש write ואין execute, ולאדר שלי, זאת אומרת אלה שבחוץ, מחוץ לגרופ, יש read, יש write ואין execute.
את הדבר הזה אני יכול להכניס, רק כאשר אני הקריאיטור, כאשר אני לא קריאיטור, אני משתמש בכובע שקיים, אין לי אפשרות להחליט, מה היו הרשות במעמד מערכת ההפעלה. חבר'ה זה ברור? אני רק לא הבנתי איך נגידת תודה ש... מה כל הרשאה נגיד ארבע מייצג הרשאה מסוימת? תמיד יש לי אותו סדר, השלשה הראשונה זה ה-user, השלשה הבאה זה ה-group והשלשה השלישית זה ה-other.
כאשר כל שלשה כזאת היא מחולקת ל-read-write-executive, היא הסדר הזה. הבנתי, ונגיד, אבל איך אתה, כי מה זה אומר שזה 6? איך אני יודעת מה זה 6? זה בבינארי, 6 בבינארי. 6 זה 4 ועוד 2. אה, זה כאילו כל, ברגע שכל הדלקתי ביט, אז זה כאילו read-write ו...
כן, כן, כן. ביט דנוק, כמו כשעשינו בשנגמוד בשבוע שעבר, כל ביט דנוק זה true, כל ביט קבול זה false. בסדר? הבנתי.
מה זה סמאל חלט? תקיחה. בשביל מה 0 בהתחלה?
אה, זה, קודם כל אתה יכול לוותר על ה-0 הזה, פשוט בדרך כלל מתחילים מספר ב-0, כאשר מדובר פה על בסיס אוקטלי, אוקיי? ספרות, ספרות. כי הספרות מתפלגות בין 0 ל-7, בסדר?
בסדר. אבל אני כבר אומר לך, גם כתוביות ה-0 זה יעבוד, אבל תשמעו 0, כי מי שקורא את הקוד מבין שהספרות פה מתפלגות בין 0 ל-7, כי 7 זו הרשאה מלאה, ו-0 זה הרשאה הפסית, נכון? אז למשל...
OX זה באקסה דצימאלי, 0 זה אוקטלי, B זה בינארי, בסדר? אוקיי, בסדר. אוקיי, עכשיו, מה קרה למשמח וורד, מתקה לי, סליחו לי, מתקה, זר של מתקה, אוקיי.
יפה, אז אנחנו יודעים איך לפתוח פיידסקריפטור בתוך הפרוסס, והשאלה שלי זה איך אנחנו סוגרים את הפיידסקריפטור הזה. הדג זו נשתמת ב-close. close מקבל את המספר פיידסקריפטור שאותו פתחנו מקודם, והוא מחזיר 0 או מינוס 1 במידה שיש הצלחה או כישלון.
כישלון יכול לקרות כאשר אני מנסה לסגור כובע שלא פתחתי, או מנסה לסגור כובע נעול, או כל מיני דברים מעשו בזה. חשוב מאוד לסגור את הפיילד סקריפטור, זה בעצם מה שחרר מה שאבים. שימו לב ש-Close לא שומר קובס או סוגר אותו בדיסק.
ה-Close רק סוגר את הפיילד סקריפטור. הוא מפנה את הפיילד סקריפטור ברמת הפרוסס. עכשיו, אם פתחנו קובס ואנחנו גם יודעים איך לסגור אותו, הדבר הבא שרוצים לעשות זה להיות בעלי יכולת לקרוא ולכתוב מהקובס, כי זה מה שעושים מקבצים.
אז ה-System.read תודה. קורה מתוך הקובע שה-FileDescriptor מתייחס אליו, זה שעשיתי לו Open, Count בתים, קורא ממנו Count בתים, לתוך ה-Buffer, מתוך ה-FileDescriptor אל תוך ה-Buffer. שי��ו לב שה-Prototype של ריד מקבל Buffer גנרי, בוד כוכבית. בטח למדתם את זה במבוא, אני יודע שיש סטודנטים שלא עשו קורס מבוא, כי היו פטורים, אז אני מסביר.
בויד כוכבית זה כך הכל פוינטר גנרי. אני יכול לשלוח פה בארגומנט השני, באפר של אינטים, באפר של דאבלים, באפר של תווים, באפר של פלוטים ואפילו באפרים של סטרקטים. למעשה הכל עניין של כתובת.
כל באפר זה כך הכל כתובת לתא הראשון. אז ברמת הפרוטוטייק, בווי כוכבית זה מימוש של טמפלייט, נכון? זה באפר גנרי, כי אני לא רוצה עכשיו לכתוב ריד עבור כל אחד מהטיפוסים, אז בווי כוכבית אומר אני יכול לקבל כל צורך של כתובת, כתובת לכל טיפוס, בסופו של דבר למעט הפעלה לא מעניין אותה, מה אני מתחזק? אם למשל הבאפר הזה הוא בגודל 100 בייט, count שווה ל-100, אז 100 בייט או 200 בייט, בוא נניח 200 בייט, אז 200 בייט יכול להיות 50 אינפים, כי כל אין שוקל ארבעה בתים, 200 בית יכול להיות 25 דאבלים, כי כל דאבל שוקל שמונה, 200 בית יכול להיות 50 פלוט, או 200 תבים, כל תב שוקל בית מודל, או אפילו שני סטודנטים, כאשר הגברתי מחלק הסטודנט, או סטראקט סטודנט, וכל סטודנט שוקל 100 בית. למעשה למעט הפעלת זה ממש לא מעניין.
מה שהיא עושה, היא קוראת מתוך הקובץ הזה, count בתים, לתוך הבאפר שהגדרתי, כמובן הגדרתי אותו לפני זה, כיחידת דיכרון, ואני שולח אותו לתוך הארגומטה שלי. הערך שחוזר מהריב הוא עוד הפעם מינוס אחד במידה ויש קשל, נניח ולא סלחנו לקרוא מתוך הקורס, מכל הסיבות האפשריות, או שחוזר מספר שמיישג את כמות הבתים בפועל שהסלחנו לקרוא. לדוגמה, רציתי לקרוא מהבית, אבל בתוך הקובץ לא היה מספיק, בתוך הקובץ היה רק 50 בייט, אבל במקרה שכזה, יוחדר 50, אם הצלחתי לליקוח 50. שימו לב שהסיסטם כל הזה קורה, לא מתחילת הקובץ.
אלא מאיחן שהסמן נמצא למשל יש לנו קובץ, והסמן כרגע נמצא פה. עד מפה הוא קורא את אקאונט בתים. לא רק שהוא קורא את אקאונט בתים, הוא כבר מעביר אוטומטית את הסמן מעבר לקריאה, כלומר הוא יעבור מעל ה-50 בתים. הריד גם מקדם את הסמן, בהמשך נראה, חששה לשחק עם הסמן קדימה ואחורה בקלות, אבל שימו לב שכל ריד קורא בתים ומקדם את הסמן קדימה.
זו הסיבה שהרבה פעמים, כאשר עושים לקרוא קובץ, עושים לו לאחל רידים. ריד של מהבית, ריד של מהבית, ריד של מהבית, עד שהגענו לשאריד של הקובץ. ברגע שהגענו לשאריד של הקובץ, יוחזר את הערך שהוא קטן מ-100. למשל אם הקובץ היה בגודל 270, אז קראנו 100-100, ואז השאריד היא 70. אז יוחזר לנו המספר 70 בסוף של כמות הבתים בפועל שהצלחנו לקרוא בריד האחרון. זו הדרך שלנו.