ברוכים הבאים למת"ם מבוא לתכנות מערכות - 234122
מנהלה התחברות ל-stud עבודה בסביבת UNIX תרגול מס' 1 מנהלה התחברות ל-stud עבודה בסביבת UNIX
מטרות הקורס לימוד שיטות וכלים עבור פיתוח תוכנה גדולה התנסות בכתיבת תוכנה ובדיקתה המשך לימוד עקרונות התכנות ממבוא למדעי המחשב לימוד תכונות מתקדמות של שפות התכנות C/C++ מבוא לתכנות מערכות - 234122
מנהלה אתר הבית: קבלת e-mail מהאתר: http://webcourse.cs.technion.ac.il/234122 האתר מכיל מידע רב וחשוב המתעדכן במהלך הסמסטר. קבלת e-mail מהאתר: ודאו שאתם מקבלים עדכונים מהאתר ע"י כניסה ל-http://grades.cs.technion.ac.il מעבר ללשונית Settings/Auto update ובדיקה שתחת Announcements Update מסומן e-mail. מבוא לתכנות מערכות - 234122
מבנה הציון הסופי 70% מבחן סופי 30% תרגילי הבית - תקף חומר פתוח 30% תרגילי הבית - תקף 4 תרגילי בית על נושאי הקורס השונים (+ תרגיל הכנה ללא ציון) התרגילים מורכבים משאלות יבשות (כתיבת פתרון) ורטובות (כתיבת קוד, הרצתו ובדיקתו) חובה לעבור את המבחן הסופי ציון ש"ב לא ייחשב במקרה של ציון קטן מ-55 במבחן מבוא לתכנות מערכות - 234122
תרגילי בית תרגילי הבית בקורס דורשים הרבה עבודה - מומלץ לעשותם בזוגות ניתן למצוא שותף תחת לשונית Find a partner באתר הקורס. בכל סמסטר נעזבים מספר אנשים ע"י השותף שלהם. שימרו על קשר טוב עם השותף – זהו חלק מתהליך פיתוח התוכנה. סגל הקורס לא יטפל בבעיות בין שותפים ולא ינתנו הקלות בהקשר זה אין הארכות – עמידה במסגרת זמנים היא חלק חשוב מתהליך פיתוח התוכנה הארכות על בסיס אישי ינתנו רק עבור מקרים קיצוניים או שירות מילואים פעיל מבוא לתכנות מערכות - 234122
תרגילי הבית שימו לב: תרגיל מוכן הוא תרגיל שנבדק ואכן עובד הקפידו לבדוק את נכונות הקוד שלכם לפני ההגשה – נקודות אינן ניתנות לפי זמן העבודה על התרגיל אלא לפי כמות הבדיקות שבהן הוא עומד גיבוי: הקפידו לגבות באופן שוטף את הקבצים לא ינתנו הקלות לסטודנטים שאיבדו את עבודתם בגלל הזנחה מבוא לתכנות מערכות - 234122
תרגילי הבית הגשה: עקבו במדויק אחרי הוראות ההגשה לכל תרגיל המצוינות בתרגיל. הן מפרטות מה יש להגיש מודפס וכיצד יש להגיש את הקבצים דרך האתר. אי ציות להוראות אלו יגרור הורדת ציון שמרו את מספר האישור עבור ההגשה האלקטרונית מומלץ לשמור עותק של הקבצים על ספרית הבית ב-t2 ולא לגעת בו למקרה של טעויות עם ההגשה האלקטרונית מבוא לתכנות מערכות - 234122
ביקורות קוד לאחר תרגילים 2 ו-4 ייערכו ביקורות קוד (Code Reviews) להגשות לכל זוג תתבצע פגישה עם אחד המתרגלים בה נעבור על הקוד בצורה אישית אין חובה להגיע לביקורת אך יינתנו נקודות בונוס על נוכחות מומלץ לבוא לביקורת, זו הזדמנות נדירה לקבל פידבק אישי על הקוד שכתבתם ועל בעיות בסגנונו שלא ניתן להעיר עליהן בדרכים אחרות מבוא לתכנות מערכות - 234122
תרגילי בית - העתקות בקורס יופעלו שיטות מתקדמות למציאה אוטומטית של העתקות תרגילי הבית ייבדקו גם בבדיקה ידנית על למציאת העתקות מי שייתפס כמעתיק או כמי שנתן את תרגיל הבית שלו להעתיק יהיה צפוי לעונשים חמורים כולל שאלות יבשות מבוא לתכנות מערכות - 234122
נושאי התרגולים תרגול 1: עבודה בסיסית בסביבת UNIX תרגולים 2-5: תכונות מתקדמות של C ו-Abstract Data Types תרגולים 6-7: עבודה ב-UNIX ו-C-Shell תרגולים 8-12: C++ תרגולים 13-14: חזרה ושאלות ממבחנים מבוא לתכנות מערכות - 234122
עבודה על השרת אפשרויות התחברות עבודה במחשב אישי התחברות ל-stud עבודה על השרת אפשרויות התחברות עבודה במחשב אישי מבוא לתכנות מערכות - 234122
התחברות ל-stud תרגילי הבית יבדקו ע"י הידור והרצת הקוד המוגש על שרת ה-stud ידוע גם כ-t2 למרות שכתובתו היא stud.technion.ac.il לשם כך עליכם לדעת כיצד ניתן להתחבר אל השרת ולעבוד עליו תכנית שעובדת על המחשב הביתי שלכם אינה בהכרח נכונה עליכם לוודא את נכונותה בעזרת הרצתה על השרת ב-stud קיימת מערכת הפעלה מסוג UNIX ולכן עליכם לוודא שהתכנית שלכם מתנהגת בצורה נכונה בסביבה זו מבוא לתכנות מערכות - 234122
דרכי עבודה הדרכים הבאות הן הדרכים המומלצות לעבוד בקורס ניתן לעבוד גם בכל צורה אחרת, כל עוד התוצאה הסופית עובדת כנדרש עם זאת, סגל הקורס לא יעזור בבעיות הצצות מעבודה בכלים אחרים כדי לכתוב את התוכנה כך שתעבוד נכון על ה-stud קיימות שתי אפשרויות: עבודה על השרת - כתיבת הקוד ובדיקתו על ה-stud לאורך כל הדרך עבודה על מחשב אישי וביצוע בדיקות על השרת מדי פעם מבוא לתכנות מערכות - 234122
עבודה על השרת בשיטה זו נשתמש בתוכנה כלשהי כדי להתחבר אל השרת דרך הרשת לאחר ביצוע ההתחברות נקבל חלון טרמינל אשר מקושר לחשבוננו במחשב המרוחק כל הפקודות שיוכנסו לטרמינל מתבצעות על המחשב המרוחק. עיקר העבודה יהיה בעזרת מנשק טקסטואלי ניתן גם להריץ תכניות עם מנשק גרפי המילה הנכונה בעברית היא מנשק - מהשורש י.ש.ק. ולא ממשק. מצד שני, אין הרבה מקומות שמישהו מקפיד בהם על שימוש במילה הנכונה. למנשק טקסטואלי יתרונות בגמישותו, קל להריץ ממנו כל תכנית ולחבר תכניות כדי לבצע פעולות מסובכות בשניות. מצד שני, קשה להתרגל למנשק ולבצע בו פעולות שלא יודעים כיצד לבצען. מומלץ להתרגל לעבודה במנשק זה כי היא הכרחית ברמה כלשהי ברוב התחומים בעולם פיתוח התוכנה (כן, גם בעבודה בסביבת Windows) הרצת תכניות עם מנשק גרפי היא רעיון נהדר, אבל בפועל שרת ה-stud אינו חזק ובנוסף הוא עמוס (ואף עמוס במיוחד בימים שלפני הגשת תרגיל במת"מ). על כן תכניות גרפיות אינן רצות עליו בצורה אופטימלית תמיד ולכן בכל מקרה חשוב לדעת כיצד לעבוד במנשק טקסטואלי. מבוא לתכנות מערכות - 234122
אפשרויות התחברות ניתן להתחבר ל-stud בשיטות הבאות: התחברות בעזרת SSH: עבור מחשבים בסביבת windows יש להוריד את התוכנה מהכתובת הבאה: ftp://ftp.cs.technion.ac.il/pub/ssh-client/sshclient.exe עבור מחשבים בסביבת לינוקס (או מק( ניתן פשוט להשתמש בפקודה ssh מחלון טרמינל. התחברות בעזרת Go-Global (עבור Windows): גלישה לכתובת http://www.technion.ac.il/GG/IPviewer.html עובד רק עם Internet Explorer מבוא לתכנות מערכות - 234122
עבודה במחשב אישי עבודה על השרת אינה נוחה בגלל העומס הרב על ה-stud. מבוא לתכנות מערכות - 234122
עבודה במחשב אישי עבודה ב-Eclipse CDT. סביבת העבודה המומלצת ע"י צוות הקורס משתמשת בקומפיילר דומה לזה שב-stud ניתנת להרצה על windows או לינוקס מותקנת במחשבי החווה עבודה במחשבי הלינוקס בחווה (או התקנת לינוקס): השימוש בלינוקס יכול להקל מאוד על מלאכת הדיבוג מאחר וכמות ההבדלים בין מחשב המריץ לינוקס ל- studקטנה יותר התקנת Cygwin: סביבה המדמה את UNIX עבור מחשבי Windows מומלצת עבור תרגיל בית 3 (C-Shell) מבוא לתכנות מערכות - 234122
מידע נוסף כדי להקל על השימוש במגוון הכלים הגדול אתר הקורס מכיל מספר מדריכים המסבירים את הפרטים הטכניים עבור שימוש בכלים הללו: מדריך התחברות ל-stud: מפרט את הדרכים השונות לעבודה (כולל התקנת Cygwin) מדריך עבור Eclipse CDT: מסביר את תהליך ההתקנה ויצירת פרויקט ראשון המדריכים נמצאים באתר תחת Course Material, Guides. בנוסף, ייערכו 3 תרגולי עזר אשר יתמקדו בהפעלה טכנית של כלים הדרושים בקורס זמן התרגולים יוכרז בהמשך שקפי התרגולים זמינים באתר תחת Course Material, Auxiliary Tutorials מבוא לתכנות מערכות - 234122
מהי מערכת הפעלה? מערכת הקבצים ב-UNIX עבודה בחלון Shell מבוא לתכנות מערכות - 234122
מהי מערכת הפעלה? מערכת הפעלה מהווה שכבת ביניים בין החומרה לבין התוכנה מאפשרת גישה נוחה למחשב עבור משתמשים ומתכנתים עבור המשתמש: מספקת מנשק נוח למחשב ושירותים בסיסיים עבור המתכנת: מספקת מנשקים לניהול זיכרון, קבצים והתקני חומרה נוספים דוגמאות למערכות הפעלה: Windows Ubuntu OSX Android iOS מבוא לתכנות מערכות - 234122
מהי UNIX? UNIX הינה משפחה של מערכות הפעלה יתרון מערכות ההפעלה ממשפחה זו הוא בקיומו של סטנדרט נוח עבור השירותים אותן היא מספקת (הקרוי POSIX) רוב מערכות ההפעלה המוכרות לכם עומדות בסטנדרט של UNIX המפורסמת ביותר כיום היא Linux יוצאת הדופן היא כמובן Windows בפרט - מערכת ההפעלה על שרת ה-stud עליו נבדקים תרגילי הבית היא Linux. לינוקס היא למעשה גרסה חופשית של מערכת הפעלה שנוצרה כתגובה לכך ש-UNIX המקורית החלה להמיכר כתשלום. לינוקס היא מערכת הפעלה בקוד פתוח, כלומר ניתן להוריד את הקוד ולקמפל אותו בעצמכם ולכן צברה פופולריות רבה בתחומים שונים לינוקס מופצת במספר הפצות, כל הפצה נראית שונה והמשותף לכולן הוא רק הגרעין (שאינו חשוף ישירות למשתמש). למשל גם Ubuntu המותקנת בחווה וגם Android, מערכת ההפעלה של גוגל לסלולרים, הן הפצות של לינוקס אך הן נראות שונות לגמרי למשתמש הפשוט. ההפצה המותקנת על שרת ה-stud נקראת Red Hat. (למען הדיוק, גרעין מערכת ההפעלה Android מבוסס על לינוקס אך עם הזמן התפתחו הבדלים בין המערכות) מבוא לתכנות מערכות - 234122
מערכת הקבצים ב-UNIX מערכת ההפעלה אחראית בין השאר על ארגון הקבצים במחשב מערכת הקבצים ב-UNIX מורכבת מקבצים ותיקיות – בדומה ל-Windows קובץ הוא אוסף סדור של תווים תיקיה (Directory) מאפשרת שמירת מספר קבצים ותיקיות נוספות בצורה מסודרת לכל קובץ או תיקיה יש שם אין מגבלות על אורך השם מקובל ששם קובץ הוא מהצורה <name>.<extension> למשל test.c עבור קובץ מקור בשפת C אין ב-UNIX סיומת מיוחדת לקובץ הרצה (כמו exe ב-Windows) כל קובץ או תיקיה נמצאים בתוך תיקיה כלשהי מלבד התיקיה הראשית - התרגום עבור Directory הוא מדריך. עם זאת בחרנו להשתמש בתרגום עבור המונח הנהוג במערכות הפעלה מודרניות. כל המילים הבאות הן שמות נרדפים לתיקיה: Directory, Folder, ספריה, מדריך. שמות קבצים ב-UNIX הינם case sensitive בניגוד ל-Windows. מבוא לתכנות מערכות - 234122
התייחסות לקבצים כדי להתייחס לקובץ יש להשתמש בשמו התיקיה הראשית נקראת "/" ניתן להתייחס לקובץ ע"י שמו המוחלט: /usr/mtm/exercise1/main.c התו "/" משמש כסימן מפריד להגדרת מסלול במערכת הקבצים בכל חיבור ובכל זמן קיימת תיקיה המוגדרת כתיקיה הנוכחית ניתן להתייחס לקובץ על ידי שם יחסי מהתיקיה הנוכחית: main.c אם התיקיה הנוכחית היא /usr/mtm/exercise1 exercise1/main.c אם התיקיה הנוכחית היא /usr/mtm מבוא לתכנות מערכות - 234122
ריבוי משתמשים UNIX היא מערכת הפעלה מרובת משתמשים לכל משתמש במערכת קיימת תיקית בית בהתחברות למערכת התיקיה הנוכחית היא תיקית הבית של המשתמש למשל תיקית הבית של המשתמש mtm (חשבון ה-stud של צוות הקורס) היא: /tx/u/023/mtm מבוא לתכנות מערכות - 234122
קיצורים בנוסף מוגדרים הקיצורים הבאים עבור שמות קבצים: . - נקודה אחת מייצגת את התיקיה הנוכחית .. - שתי נקודות מייצגות את תיקיית האב התיקיה בה נמצאת התיקיה הנוכחית ~ - מייצגת קיצור לתיקיית הבית של המשתמש ~user - מייצגת קיצור לתיקיית הבית של המשתמש user למשל ~mtm היא תיקית הבית של הקורס בשרת ה-stud ניתן להשתמש בקיצור * כדי להתייחס למספר קבצים בבת אחת ע"י שימוש בתבניות, למשל: * מתייחס לכל הקבצים *.txt יותאם לכל הקבצים ששמם מסתיים ב-".txt" מבוא לתכנות מערכות - 234122
דוגמה /usr/uri/progs/Hello.c /usr/uri/progs/Matam progs ~/progs ./hw1 / (root) Matam usr tmp ari uri progs Hello.c bin hw1 hw2 נתון מבנה של מערכת קבצים לדוגמה ב-UNIX: למה מתייחסות המחרוזות הבאות? /usr/uri/progs/Hello.c /usr/uri/progs/Matam progs ~/progs ./hw1 ../hw2 ~ari/progs ~mtm/public/1011a/ex1 ~/progs/* מבוא לתכנות מערכות - 234122
prompt (לא מקלידים אותו) עבודה בחלון ה-Shell לאחר ההתחברות מתקבל חלון טרמינל בחלון זה יכול המשתמש להכניס את הפקודה הבאה למחשב ולקבל את הפלט עבור פקודה זו הכנסת פקודה מתבצעת ע"י רישום שמה והפרמטרים שלה ולחיצה על Enter לכל הפקודות יש את המבנה הבא: > command [arg1] [arg2] [arg3] ... מספר הארגומנטים לפקודה משתנה בהתאם לפקודה ויכול להיות כל מספר (כולל 0) בשביל להתנתק בכל שלב ניתן לסגור את חלון הטרמינל או לרשום את הפקודה exit. נשתמש ב-<> כדי לסמן פרמטר הכרחי לפקודה ו-[] כדי לסמן פרמטר אופציונלי prompt (לא מקלידים אותו) שם הפקודה לביצוע ארגומנטים לפקודה מבוא לתכנות מערכות - 234122
פקודות בסיסיות ב-UNIX כדי להדפיס תוכן של תיקיה נשתמש בפקודה ls: > ls [flags] [files] ניתן לרשום פשוט ls עבור הדפסת תוכן התיקיה הנוכחית ניתן להוסיף את שם התיקיות שאת תוכנן נרצה להדפיס לרוב הפקודות שנלמד אפשר להוסיף פרמטרים נוספים הנקראים דגלים: למשל הדגל -l עבור הפקודה ls יגרום להדפסת הפלט כך שכל קובץ מופיע בשורת פלט נפרדת עם מידע נוסף הדגל -a יגרום לפקודה להדפיס גם פריטים נסתרים פריט נסתר ב-UNIX הוא כל קובץ או תיקיה ששמם מתחיל ב-. (נקודה) בהרבה מהפקודות ניתן לשלב מספר דגלים בבת-אחת כאשר הדגלים מיוצגים ע"י אות יחידה למשל הפקודה ls -a -l זהה לפקודה ls -al מבוא לתכנות מערכות - 234122
ls - דוגמאות >ls hello.c private/ story.txt >ls private example.txt >ls -l total 12 -rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.c drwx------ 2 mtm users 4096 Sep 1 14:28 private/ -rw------- 1 mtm users 1081 Sep 1 14:28 story.txt >ls -al total 28 drwx------ 3 mtm users 4096 Sep 1 14:29 ./ drwx--x--x 50 mtm users 12288 Sep 1 10:52 ../ -rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.c drwx------ 2 mtm users 4096 Sep 1 14:28 private/ -rw------- 1 mtm users 1081 Sep 1 14:28 story.txt מבוא לתכנות מערכות - 234122
ניהול תיקיות הדפסת שם התיקיה הנוכחית ע"י הפקודה pwd: > pwd ניתן להחליף את התיקיה הנוכחית ע"י הפקודה cd: > cd <directory> ניתן ליצור תיקיה חדשה ע"י הפקודה mkdir: > mkdir <name> ניתן למחוק תיקיה ריקה ע"י הפקודה rmdir: > rmdir <directory> מבוא לתכנות מערכות - 234122
ניהול תיקיות - דוגמאות >cd ~ >pwd /usr/030/moshe >cd matam matam: No such file or directory. >mkdir matam /usr/030/moshe/matam >cd .. >rmdir matam מעבר לתיקית הבית בעזרת הקיצור ~ בכל הפקודות, אם אחד הפרמטרים אינו תקין תודפס הודעת שגיאה מתאימה והפקודה תופסק כאשר הפקודה אינה נכונה - היא אינה מובנת למערכת ומתקבלת הודעת שגיאה. הודעת השגיאה אומרת בדיוק באיזו שלב של ניתוח הפקודה חלה בעיה ואיזו, אך בשלב הראשוני מדובר במשפט סתום למדי שאינו עוזר למשתמש מתחיל. הנה כמה טיפים: חפשו באינטרנט את הודעת השגיאה No such file or directory - לא קיים קובץ או תיקיה המתאימים לאחת ממחרוזת ההתייחסות בפקודה Command not found - אין פקודה המתאימה למילה הראשונה בשורת הפקודה, שימו לב שעובר הרצת תכניות בתיקיה הנוכחית יש להוסיף "./" בתחילת הפקודה (או לבצע התאמה אישית כך שהדבר ייעשה אוטומטית) Permission denied - נסיון לבצע פעולה בניגוד להרשאות, המקרה הבולט ביותר הוא נסיון להריץ קובץ שאינו קובץ הרצה. מעבר לתיקית האב בעזרת הסימון .. מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים הפקודה cp משמשת להעתקת קבצים או תיקיות ניתן להשתמש בפקודה בשתי דרכים: > cp [options] <file1> <file2> יוצרת העתק חדש של file1 בשם file2 > cp [options] <file1> ... <file𝑛> <directory> יוצרת העתקים חדשים של כל הקבצים בתיקיה קיימת אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלף (overwritten) דגלים שימושיים: -r: מבצע העתקה רקורסיבית של תיקיות ותוכנן ללא דגל זה תיקיות אינן מועתקות -i: מבקש אישור לפני מחיקת קובץ קיים מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים הפקודה mv משמשת להעברת קבצים או תיקיות או שינוי שמם ניתן להשתמש בפקודה בשתי דרכים: > mv [options] <file1> <file2> משנה את שמו של file1 ל-file2 עובדת גם עבור תיקיות > mv [options] <file1> ... <file𝑛> <directory> אם הפרמטר האחרון הוא שם של תיקיה קיימת הפקודה מעבירה את הקבצים לתוכה אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלף (overwritten) דגלים שימושיים: -i: מבקש אישור לפני מחיקת קובץ קיים מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים הפקודה rm מאפשרת מחיקת קבצים או תיקיות: > rm [ options ] <files> דגלים שימושיים: -r: מבצע מחיקה רקורסיבית של תיקיות ללא דגל זה ספריות אינן נמחקות -i: מבקש אישור לפני מחיקת קובץ -f: לא מבקש אישור בשום מקרה שימו לב: לא ניתן לשחזר קבצים שנמחקו הפקודה הבאה מוחקת את כל הקבצים והספריות במיקום הנוכחי ועלולה להיות הרסנית למדי: > rm -rf * מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים - דוגמאות >ls hello.c private/ story.txt >cp hello.c prog.c hello.c private/ prog.c story.txt >mv prog.c private/program.c >ls private example.txt program.c >mv hello.c story.txt private private/ מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים - דוגמאות >ls private example.txt hello.c program.c story.txt >rm -i private/story.txt rm: remove regular file `private/story.txt'? y >rm private rm: cannot remove directory `private': Is a directory >rm -ri private rm: descend into directory `private'? n >rm -rf private >ls > מבוא לתכנות מערכות - 234122
הדפסת תוכן של קבצים הפקודה cat מדפיסה למסך את תוכן הקובץ > cat <file> אם הקובץ גדול המסך יגלול ולא נוכל לראות בנוחות את התחלתו אם לא מופיע שם קובץ הפקודה מדפיסה את הקלט הסטנדרטי (בד"כ קלט מהמקלדת) בהמשך נראה למה זה מועיל הפקודה more מדפיסה למסך את התוכן, אך עוצרת כאשר נגמר המקום > more <file> לחיצה על enter תגרום להדפסת שורה נוספת לחיצה על q תפסיק את ההדפסה הפקודה less היא שיפור של more ומאפשרת גלילה בשני הכיוונים ועוד אפשרויות > less <file> מבוא לתכנות מערכות - 234122
הרשאות קבצים לכל קובץ יש הרשאות הקובעות למי מותרת הגיש לקובץ ולצורך אילו פעולות. ישנם 3 סוגי משתמשים: User - בעל הקובץ. בעל הקובץ הוא המשתמש שיצר את הקובץ במערכת. Group - משתמש אשר שייך לקבוצה של בעל קובץ הגדרת קבוצות משתמשים הינה מחוץ לחומר הקורס Other - שאר המשתמשים במערכת לכל סוג משתמש יש 3 הרשאות שונות: Read - מאפשרת קריאת תוכן הקובץ (כולל העתקתו) Write - מאפשרת שינוי הקובץ הקיים Execute - מאפשרת להריץ את הקובץ מבוא לתכנות מערכות - 234122
התו d מציין אם מדובר בתיקיה הרשאות קבצים כדי לראות מהן ההרשאות ניתן להשתמש בפקודה ls -l, לדוגמה: > ls -l -rwx--x--x 1 mtm users 6647 Aug 31 17:25 a.out* -rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.c drwx------ 2 mtm users 4096 Aug 31 17:23 private/ drwxrwxrwx 2 mtm users 4096 Aug 31 17:23 public/ שורת ההרשאות עבור כל קובץ היא רצף האותיות הבא: drwxrwxrwx אם מופיעה אות ההרשאה קיימת אם מופיע מקף ההרשאה אינה קיימת מצייני ההרשאות user group other התו d מציין אם מדובר בתיקיה מבוא לתכנות מערכות - 234122
שינוי הרשאות קבצים בעל הקובץ רשאי לשנות את ההרשאות של הקובץ שינוי ההרשאות ניתן בעזרת הפקודה chmod: > chmod <mode> <files> <mode> - שרשור תווים המורכב מ-who, opcode ו-permission אם לא מצוין who, ברירת המחדל היא a. Who Opcode Permission u - User + - Add permission r - Read g - Group - - Remove permission w - Write o - Other = - Assign permission x - Execute a - All דוגמאות: > chmod u+x file > chmod g-w,o-w file > chmod =r file > chmod u=rwx, g=rx, o=r file --------- rwxrwxrwx --x------ rwxr-xr-x r--r--r-- rwxr-xr-- מבוא לתכנות מערכות - 234122
הרשאות עבור תיקיות Execute Write Read עבור תיקיות להרשאות המשמעות שונה: Read – הרשאה לראות את רשימת הקבצים Write – הרשאה של יצירת/מחיקת תיקייה או שינוי קבצים בתיקייה Execute – הרשאת כניסה לתיקייה לדוגמה, מה ההרשאות הנדרשות לביצוע כל אחת מהפעולות הבאות? > cd my_dir > mkdir directory > rmdir directory > ls Execute Write Read מבוא לתכנות מערכות - 234122
הפקודה man המידע שהוצג כאן לגבי כל אחד מהפקודות חלקי > man <command name> ה-man של פקודה מכיל את צורת ההפעלה שלה, דגלים אפשריים ועוד. למשל: > man ls > man rm > man man אם לא בא לכם להשתמש ב-man ככה ניתן למצוא דרך גוגל את אותו המידע בדיוק, פשוא חפשו את שם הפקודה בצירוף man pages ותגיעו לקישורים באינטרנט המכילים את קבצי man של הפקודה. מבוא לתכנות מערכות - 234122
ערוצי קלט/פלט לכל תכנית יש ערוצי קלט וערוצי פלט – אלו הם הדרכים בהם היא מקבלת קלט ומציגה את הפלט שלה לכל תכנית קיימים ב-UNIX 3 ערוצי ברירת מחדל: ערוץ הפלט הסטנדרטי: אליו מודפס הפלט ברירת מחדל היא הדפסה לחלון הטרמינל ערוץ הקלט הסטנדרטי: ממנו מקבלת התכנית את הקלט ברירת המחדל היא הפקודות המוכנסות בחלון הטרמינל ערוץ השגיאות הסטנדרטי: ערוץ פלט נוסף המשמש להדפסת הודעות שגיאה ברירת המחדל היא הדפסה לחלון הטרמינל ערוצי קלט/פלט נוספים יכולים להיות למשל קבצים, נתייחס למקרים אלו בהמשך הקורס מבוא לתכנות מערכות - 234122
הפניית קלט/פלט בעת קריאה לפקודה בטרמינל ניתן להפנות את ערוצי הקלט והפלט הסטנדרטיים לקבצים הפניית ערוץ הפלט הסטנדרטי נעשית באמצעות האופרטור "<": > command [arguments] > <output_file> הפניית ערוץ הקלט הסטנדרטי נעשית באמצעות האופרטור ">": > command [arguments] < <input_file> הפניית ערוץ הפלט וערוץ השגיאות הסטנדרטי נעשית באמצעות באופרטור "&<": > command [arguments] >& <output_and_errors_file> אם ננסה לכתוב לתוך קובץ קיים הפקודה לא תתבצע ניתן להוסיף "!" כדי למחוק את הקובץ הקיים ולהחליפו אם ברצוננו להוסיף את הפלט להמשכו של קובץ קיים ניתן להשתמש ב-">>" או ">>&" (בהתאמה) במקרה זה יש להוסיף "!" אם הקובץ לא קיים עדיין (הערה למתקדמים) פקודה לכתיבה מחדש של קובץ תבוצע אם משתנה noclobber מוגדר. ראה למשל http://publib.boulder.ibm.com/infocenter/systems/index.jsp?topic=/com.ibm.aix.baseadmn/doc/baseadmndita/c_inout_redir.htm מבוא לתכנות מערכות - 234122
הפניית קלט/פלט ניתן להפנות מספר ערוצים בבת אחת הפניית הקלט והפלט יחדיו נעשית כך: > command [arguments] < input > output כדי להפנות את ערוץ השגיאות בנפרד מערוץ הפלט ניתן לרשום: > (command [arguments] > output) >& errors כדי להפנות כל אחד מהערוצים לקובץ שונה, תוך וידוא שהקבצים ירשמו מחדש אם הם קיימים יש לכתוב: > (command [arguments] < input >! output) >&! errors ועוד כמה הערות למתקדמים: ניתן להפנות את הפלט למסך ואת השגיאות לקובץ כך: (<command> > /dev/tty) >& <f2> ניתן להתעלם מאחד מהם ע"י שימוש ב-/dev/null, למשל: (<command> > /dev/null ) >& <f2> /dev/null הוא קובץ מיוחד במערכת הקבצים שמתנהג כמו "חור שחור" מבוא לתכנות מערכות - 234122
הפניית קלט/פלט - דוגמאות בעזרת הפניית קלט/פלט ניתן לעשות שימושים שונים בפקודה cat למשל: >cat > file.txt Hello world! >ls file.txt >cat file.txt >cat file.txt > file2.txt >cat file2.txt >cat file.txt >> file2.txt הכנסת קלט מהמקלדת מבוא לתכנות מערכות - 234122
הפניית קלט/פלט - דוגמאות >cat < file2.txt > file.txt file.txt: File exists. >cat < file2.txt >! file.txt >cat file.txt Hello world! >rmdir foo rmdir: `foo': No such file or directory >rmdir foo > output.txt >rmdir foo >& error.txt >cat error.txt הודעת השגיאה נשלחת לערוץ השגיאות ולכן אינה מופנית לקובץ מבוא לתכנות מערכות - 234122
הידור תכניות ב-stud הרצת ודיבוג תכניות מבוא לתכנות מערכות - 234122
Hello world ב-stud נדגים כעת כיצד ניתן לכתוב תכנית על ה- studולהריצה לשם כך עלינו לעבור את השלבים הבאים: התחברות ל-stud ראינו כבר כיצד ניתן לעשות זאת במספר דרכים כתיבת הקוד בעורך כלשהו הידור הקוד בעזרת מהדר (compiler) הרצת הקוד מבוא לתכנות מערכות - 234122
כתיבת הקוד כדי לכתוב קוד נצטרך להשתמש בתכנית כלשהי לעריכת טקסט מספר עורכי טקסט המותקנים ב-stud: תכניות ללא מנשק גרפי: nano- פשוטה לשימוש, אבל לא נוחה לעריכת קוד בטווח הארוך vi או vim - מכילה את כל התכונות שמשתמש צריך, אבל דורשת זמן הסתגלות ארוך יותר emacs - כבדה וגם דורשת קצת זמן הסתגלות אבל בעלת אפשרויות רבות למשתמשים מתקדמים תכניות בעלות מנשק גרפי: gvim - גרסה גרפית של vim nedit - תכנית פשוטה לשימוש (דומה להתנהגות תוכנות דומות ב-Windows) אך בעלת אפשרויות מתקדמות יותר emacs - אם מנשק גרפי זמין התוכנה תופעל עם מנשק גרפי מומלץ להשקיע דקה-שתיים בכל אחת מהתכניות ולהחליט מה הכי נוח לכם - בסופו של דבר,לכל משתמש העדפותיו האישיות מבוא לתכנות מערכות - 234122
קמפול הקוד כדי לקמפל את הקוד שכתבנו לשפת מכונה יש להשתמש בקומפיילר. בסביבת UNIX מותקן כקומפיילר ברירת מחדל הקומפיילר gcc GNU Compiler Collection אופן השימוש: > gcc <flags> <files> -o <output file> למשל על מנת לקמפל את הקוד בקובץ hello.c: > gcc hello.c -o hello אם אין שגיאות יווצר קובץ הרצה בשם המתאים אם קיימות שגיאות הן יודפסו למסך לערוץ השגיאות מבוא לתכנות מערכות - 234122
שימוש ב-gcc אם הדגל -o אינו מוגדר הקומפיילר יבחר בשם קובץ הפלט a.out כברירת מחדל הדגל -g משמש להוספת מידע הנחוץ ל-debugger כשאתם מתכננים לדבג הקפידו להשתמש בדגל זה בעזרת דגל זה ה-debugger יכול להדפיס מידע מדויק על השורות בהן קורות השגיאות ניתן לקמפל מספר קבצים בבת אחת: > gcc file1.c file2.c files3.c –o my_prog > gcc *.c –o my_prog בעבודה עם קומפיילר gcc תחת windows כמו שמסופק עםEclipse באתר הקורס שם ברירת המחדל הוא a.exe הדגל -g חשוב מאוד גם כאשר עובדים עם valgrind כדי לאפשר לה להדפיס את מספר השורות הרלוונטיים בכל קובץ מדוע קיים בכלל דגל -g? מקוד המקור לאחר ההידור לא נשאר כמעט זכר. שמות המשתנים נמחקים לגמרי וכך גם שמות הקבצים ומספרי השורות. תוכלו להיווכח בכך בקורס את"מ כאשר תראו כיצד נראה קוד לאחר הידור. מידע על שגיאות וטעויות רלוונטי רק אם ניתן לקשר אותו לשורה ספציפית בקוד המקור כדי שנוכל לתקנו. שימוש בדגל -g גורם למהדר לשמור בקובץ ההרצה את קוד המקור וקישורים בין פקודות המכונה לבין השורה בקוד שגרמה ליצירתן. כך ניתן להשתמש בדיבאגר בצורה שתוכל להתייחס לשורות בקוד המקור ולשמות המשתנים והטיפוסים אשר מופיעים בו. מבוא לתכנות מערכות - 234122
שימוש ב-gcc במהלך הקורס נדרוש לקמפל את הקוד עם הדגלים הבאים: > gcc -std=c99 -Wall -Werror -pedantic-errors ... משמעות הדגלים: -std=c99: קובע את הסטנדרט C99 המוסיף כמה תכונות חשובות לשפה -Wall: מציג את כל האזהרות האפשריות. אזהרות הן בעיות בקוד שאמנם ניתן להדר אך בדרך כלל מעידות על באגים -Werror: מתייחס לאזהרה כאל שגיאה אין הצדקה לקוד המתקמפל עם אזהרות ולכן הדרישה בקורס היא לקוד המתקמפל ללא אזהרות -pedantic-errors: מגביל את הקוד לסטנדרט הנבחר כך שדברים אשר המהדר יודע להתמודד איתם אך אינם חלק מהסטנדרט ייחשבו כשגיאות מומלץ להשתמש בדגלים אלו תמיד מאחר והם מקלים על העבודה ומשפרים את איכות הקוד (חובה במהלך הקורס) מבוא לתכנות מערכות - 234122
הרצת הקוד לאחר הקומפילציה מתקבל קובץ הרצה כאמור, אין לקובץ סיומת מיוחדת gcc דואג בצורה אוטומטית להוסיף הרשאות ריצה לקובץ בשביל להריץ את הקובץ עלינו לרשום את שמו כשם הפקודה להרצה להרצת פקודה בספריה הנוכחית יש להוסיף “./” לפי שם הקובץ בהמשך נראה כיצד ניתן לאפשר לקובץ לרוץ ללא הוספת “./” > ./hello Hello World! מבוא לתכנות מערכות - 234122