Download - ברוכים הבאים למת"ם
ברוכים הבאים למת"ם234122מבוא לתכנות מערכות -
הוכן ע"י עומר סטרולוביץ
מבוסס על עבודתם של ואדים אייזנברג ולי-טל משיח
3מבוא לתכנות מערכות - 234122
מטרות הקורס
פיתוח תוכנה גדולהעבור שיטות וכלים לימוד
התנסות בכתיבת תוכנה ובדיקתה
המשך לימוד עקרונות התכנות ממבוא למדעי המחשב++C/Cלימוד תכונות מתקדמות של שפות התכנות –
4מבוא לתכנות מערכות - 234122
מנהלה
:אתר הבית–http://webcourse.cs.technion.ac.il/234122
האתר מכיל מידע רב וחשוב המתעדכן במהלך הסמסטר.–
קבלתe-mail:מהאתר ודאו שאתם מקבלים עדכונים מהאתר ע"י כניסה ל-–
http://grades.cs.technion.ac.il מעבר ללשונית Settings/Auto update .e-mail מסומן Announcements Updateובדיקה שתחת
5מבוא לתכנות מערכות - 234122
מבנה הציון הסופי
70%מבחן סופי
30% תקף- תרגילי הבית תרגילי בית על נושאי הקורס השונים )+ תרגיל הכנה ללא ציון(4–
התרגילים מורכבים משאלות יבשות )כתיבת פתרון( ורטובות )כתיבת קוד, –הרצתו ובדיקתו(
חובה לעבור את המבחן הסופי במבחן55ציון ש"ב לא ייחשב במקרה של ציון קטן מ-–
6מבוא לתכנות מערכות - 234122
תרגילי בית
מומלץ לעשותם בזוגות- הרבה עבודה תרגילי הבית בקורס דורשים באתר הקורס.Find a partnerניתן למצוא שותף תחת לשונית –
בכל סמסטר נעזבים מספר אנשים ע"י השותף שלהם.–
שימרו על קשר טוב עם השותף – זהו חלק מתהליך פיתוח התוכנה.•
סגל הקורס לא יטפל בבעיות בין שותפים ולא ינתנו הקלות בהקשר זה–
היא חלק חשוב מתהליך פיתוח עמידה במסגרת זמנים – אין הארכותהתוכנה
הארכות על בסיס אישי ינתנו רק עבור מקרים קיצוניים או שירות מילואים –פעיל
7מבוא לתכנות מערכות - 234122
תרגילי הבית
ואכן עובדשנבדקשימו לב: תרגיל מוכן הוא תרגיל הקפידו לבדוק את נכונות הקוד שלכם לפני ההגשה – נקודות אינן ניתנות לפי –
זמן העבודה על התרגיל אלא לפי כמות הבדיקות שבהן הוא עומד
:לא ינתנו הקלות הקפידו לגבות באופן שוטף את הקבצים גיבוילסטודנטים שאיבדו את עבודתם בגלל הזנחה
8מבוא לתכנות מערכות - 234122
תרגילי הבית
:הגשהעקבו במדויק אחרי הוראות ההגשה לכל תרגיל המצוינות בתרגיל. הן –
מפרטות מה יש להגיש מודפס וכיצד יש להגיש את הקבצים דרך האתר.
אי ציות להוראות אלו יגרור הורדת ציון•
עבור ההגשה האלקטרוניתמספר האישור שמרו את –
ולא לגעת t2/studמומלץ לשמור עותק של הקבצים על ספרית הבית ב-–בו למקרה של טעויות עם ההגשה האלקטרונית
9מבוא לתכנות מערכות - 234122
ביקורות קוד
ביקורות קוד ייערכו 4 ו-2לאחר תרגילים(Code Reviewsלהגשות )לכל זוג תתבצע פגישה עם אחד המתרגלים בה נעבור על הקוד בצורה –
אישית
זו הזדמנות נדירה לקבל פידבק אישי על הקוד מומלץ לבוא לביקורת ,שכתבתם ועל בעיות בסגנונו שלא ניתן להעיר עליהן בדרכים אחרות
10מבוא לתכנות מערכות - 234122
תרגילי בית - העתקות
בקורס יופעלו שיטות מתקדמות למציאה אוטומטית של העתקות
תרגילי הבית ייבדקו גם בבדיקה ידנית על למציאת העתקות
יהיה נתן את תרגיל הבית שלו להעתיק או כמי שמעתיקמי שייתפס כלעונשים חמוריםצפוי כולל שאלות יבשות–
11מבוא לתכנות מערכות - 234122
נושאי התרגולים
עבודה בסיסית בסביבת 1תרגול :UNIX
תכונות מתקדמות של 2-5תרגולים :C-ו Abstract Data Types
עבודה ב-6-7תרגולים :UNIXוכתיבת תסריטים
8-12תרגולים :C++
חזרה ושאלות ממבחנים13-14תרגולים :
13מבוא לתכנות מערכות - 234122
studהתחברות ל--תרגילי הבית יבדקו ע"י הידור והרצת הקוד המוגש על שרת הstud
stud.technion.ac.il למרות שכתובתו היא t2ידוע גם כ-–
לשם כך עליכם לדעת כיצד ניתן להתחבר אל השרת ולעבוד עליואינה בהכרח נכונהתכנית שעובדת על המחשב הביתי שלכם –
לוודא את נכונותה בעזרת הרצתה על השרתעליכם –
-בstud קיימת מערכת הפעלה מסוג UNIX ולכן עליכם לוודא שהתכנית שלכם מתנהגת בצורה נכונה בסביבה זו
14מבוא לתכנות מערכות - 234122
דרכי עבודה
לעבוד בקורסהמומלצותהדרכים הבאות הן הדרכים ניתן לעבוד גם בכל צורה אחרת, כל עוד התוצאה הסופית עובדת כנדרש–
עם זאת, סגל הקורס לא יעזור בבעיות הצצות מעבודה בכלים אחרים–
-כדי לכתוב את התוכנה כך שתעבוד נכון על הstud קיימות שתי אפשרויות:
לאורך כל הדרךstud- כתיבת הקוד ובדיקתו על ה-עבודה על השרת –
וביצוע בדיקות על השרת מדי פעםעבודה על מחשב אישי –
15מבוא לתכנות מערכות - 234122
עבודה על השרת
בשיטה זו נשתמש בתוכנה כלשהי כדי להתחבר אל השרת דרך הרשת לאחר ביצוע ההתחברות נקבל חלון טרמינל אשר מקושר לחשבוננו
במחשב המרוחקכל הפקודות שיוכנסו לטרמינל –
מתבצעות על המחשב המרוחק.
עיקר העבודה יהיה בעזרת מנשק טקסטואלי
ניתן גם להריץ תכניות עםמנשק גרפי
16מבוא לתכנות מערכות - 234122
אפשרויות התחברות
-ניתן להתחבר לstud:בשיטות הבאות :SSHהתחברות בעזרת –
יש להוריד את התוכנה מהכתובת windowsעבור מחשבים בסביבת •הבאה:
ftp://ftp.cs.technion.ac.il/pub/ssh-client/sshclient.exeעבור מחשבים בסביבת לינוקס )או מק) ניתן פשוט להשתמש בפקודה •
ssh.מחלון טרמינל
(:Windows )עבור Go-Globalהתחברות בעזרת –
http://www.technion.ac.il/GG/IPviewer.htmlגלישה לכתובת •
Internet Explorerעובד רק עם •
17מבוא לתכנות מערכות - 234122
עבודה במחשב אישי
-עבודה על השרת אינה נוחה בגלל העומס הרב על הstud.
-ניתן לעבוד על מחשב בבית או בחווה ולהעביר את הקוד אל הstudלבדוק את נכונות הקוד מומלץשימו לב שייתכנו הבדלים בין המחשבים ולכן –
אחת לכמה זמן )ולא רק בסוף העבודה(studעל ה-
18מבוא לתכנות מערכות - 234122
עבודה במחשב אישי
-עבודה בEclipse CDT.סביבת העבודה המומלצת ע"י צוות הקורס–
studמשתמשת בקומפיילר דומה לזה שב-– או לינוקסwindowsניתנת להרצה על –
מותקנת במחשבי החווה–
-עבודה בVisualStudioMSDNAAניתן להורדה בחינם מ-–
19מבוא לתכנות מערכות - 234122
עבודה במחשב אישי
:)עבודה במחשבי הלינוקס בחווה )או התקנת לינוקסהשימוש בלינוקס יכול להקל מאוד על מלאכת הדיבוג מאחר וכמות –
קטנה יותרstud ההבדלים בין מחשב המריץ לינוקס ל-
התקנתCygwin:Windows עבור מחשבי UNIXסביבה המדמה את –3מומלצת עבור תרגיל בית –
20מבוא לתכנות מערכות - 234122
מידע נוסף
כדי להקל על השימוש במגוון הכלים הגדול אתר הקורס מכיל מספרהמסבירים את הפרטים הטכניים עבור שימוש בכלים הללו: מדריכים
: מפרט את הדרכים השונות לעבודה )כולל התקנת studמדריך התחברות ל-–Cygwin)
: מסביר את תהליך ההתקנה ויצירת פרויקט ראשוןEclipse CDTמדריך עבור –
המדריכים נמצאים באתר תחתCourse Material, Guides. ,אשר תרגולי עזר 3ייערכו בנוסף
יתמקדו בהפעלה טכנית של כליםהדרושים בקורס
זמן התרגולים יוכרז בהמשך–
שקפי התרגולים זמינים באתר תחת–Course Material, Auxiliary Tutorials
22מבוא לתכנות מערכות - 234122
מהי מערכת הפעלה?
שכבת ביניים בין החומרה לבין התוכנהמערכת הפעלה מהווהלמחשב עבור משתמשים ומתכנתים גישה נוחה מאפשרת
עבור המשתמש: מספקת מנשק נוח–למחשב ושירותים בסיסיים
עבור המתכנת: מספקת מנשקים לניהול זיכרון,–קבצים והתקני חומרה נוספים
:דוגמאות למערכות הפעלה–Windows–Ubuntu–OSX–Android–iOS
23מבוא לתכנות מערכות - 234122
?UNIXמהי
UNIXהינה משפחה של מערכות הפעלה
יתרון מערכות ההפעלה ממשפחה זו הוא בקיומו של סטנדרט נוח עבור(POSIXהשירותים אותן היא מספקת )הקרוי
רוב מערכות ההפעלה המוכרות לכם עומדות בסטנדרט שלUNIXLinuxהמפורסמת ביותר כיום היא –Windowsיוצאת הדופן היא כמובן –
-בפרט - מערכת ההפעלה על שרת הstud עליו נבדקים תרגילי הבית היא Linux.
24מבוא לתכנות מערכות - 234122
UNIXמערכת הקבצים ב- ארגון הקבצים במחשבמערכת ההפעלה אחראית בין השאר על-מערכת הקבצים בUNIX-מורכבת מקבצים ותיקיות – בדומה ל Windows
הוא אוסף סדור של תווים קובץ–
( מאפשרת שמירת מספר קבצים ותיקיות נוספות בצורה Directory) תיקיה–מסודרת
לכל קובץ או תיקיה יש שםאין מגבלות על מבנה השם )לא חייבת להיות סיומת(–
<name>.<extensionמקובל ששם קובץ הוא מהצורה >–
C עבור קובץ מקור בשפת test.cלמשל •(Windows ב-exe סיומת מיוחדת לקובץ הרצה )כמו UNIXאין ב-–
כל קובץ או תיקיה נמצאים בתוך תיקיה כלשהימלבד התיקיה הראשית–
25מבוא לתכנות מערכות - 234122
התייחסות לקבציםכדי להתייחס לקובץ יש להשתמש בשמו
נקראת "/"התיקיה הראשית
שמו המוחלטניתן להתייחס לקובץ ע"י:–/usr/mtm/exercise1/main.c
התו "/" משמש כסימן מפריד להגדרת מסלול במערכת הקבצים–
תיקיה הנוכחיתבכל חיבור ובכל זמן קיימת תיקיה המוגדרת כ
מהתיקיה הנוכחית:שם יחסי ניתן להתייחס לקובץ על ידי–main.c אם התיקיה הנוכחית היא/usr/mtm/exercise1
–exercise1/main.c אם התיקיה הנוכחית היא /usr/mtm
26מבוא לתכנות מערכות - 234122
ריבוי משתמשים
UNIX מרובת משתמשים היא מערכת הפעלה
תיקית ביתלכל משתמש במערכת קיימת
בהתחברות למערכת התיקיה הנוכחית היא תיקית הבית של המשתמש
27מבוא לתכנות מערכות - 234122
קיצורים
:בנוסף מוגדרים הקיצורים הבאים עבור שמות קבציםהתיקיה הנוכחית- נקודה אחת מייצגת את .–
תיקיית האב- שתי נקודות מייצגות את ..–
התיקיה בה נמצאת התיקיה הנוכחית•
של המשתמשתיקיית הבית - מייצגת קיצור ל~ –
–~user מייצגת קיצור לתיקיית הבית של המשתמש -userstud היא תיקית הבית של הקורס בשרת ה-mtmלמשל ~•
ניתן להשתמש בקיצור * כדי להתייחס למספר קבצים בבת אחת ע"ישימוש בתבניות, למשל:
מתייחס לכל הקבצים *–
–.*txt ."-יותאם לכל הקבצים ששמם מסתיים בtxt"
28מבוא לתכנות מערכות - 234122
דוגמה-נתון מבנה של מערכת קבצים לדוגמה בUNIX:?למה מתייחסות המחרוזות הבאות
/usr/uri/progs/Hello.c
/usr/uri/progs/Matam
progs
/~progs
/.hw1
/..hw2
~ari/progs
~mtm/public/1011a/ex1
/~progs*/
/ (root)
Matam
usrtmp
ari uri
progs progs
Hello.c
bin
hw1 hw2
29מבוא לתכנות מערכות - 234122
Shellעבודה בחלון ה-לאחר ההתחברות מתקבל חלון טרמינל בחלון זה יכול המשתמש להכניס את הפקודה הבאה למחשב ולקבל את הפלט
עבור פקודה זו הכנסת פקודה מתבצעת ע"י רישום שמה והפרמטרים שלה ולחיצה עלEnter:לכל הפקודות יש את המבנה הבא
> command [arg1] [arg2] [arg3] ...
(0מספר הארגומנטים לפקודה משתנה בהתאם לפקודה ויכול להיות כל מספר )כולל –
בשביל להתנתק בכל שלב ניתן לסגור את חלון הטרמינל או לרשום את הפקודהexit.
prompt )לא מקלידים
אותו(
שם הפקודה לביצוע
ארגומנטים לפקודה
30מבוא לתכנות מערכות - 234122
UNIXפקודות בסיסיות ב- כדי להדפיס תוכן של תיקיה נשתמש בפקודהls:
> ls [flags] [files] עבור הדפסת תוכן התיקיה הנוכחיתlsניתן לרשום פשוט –
ניתן להוסיף את שם התיקיות שאת תוכנן נרצה להדפיס–
דגליםלרוב הפקודות שנלמד אפשר להוסיף פרמטרים נוספים הנקראים: יגרום להדפסת הפלט כך שכל קובץ מופיע ls עבור הפקודה lלמשל הדגל -–
בשורת פלט נפרדת עם מידע נוסף
יגרום לפקודה להדפיס גם פריטים נסתריםaהדגל -–
הוא כל קובץ או תיקיה ששמם מתחיל ב-. )נקודה(UNIXפריט נסתר ב-•
לשלב מספר דגלים בבת-אחתבהרבה מהפקודות ניתן –
כאשר הדגלים מיוצגים ע"י אות יחידה•
ls -alזהה לפקודה ls -a -lלמשל הפקודה •
31מבוא לתכנות מערכות - 234122
lsדוגמאות - >lshello.c private/ story.txt>ls privateexample.txt>ls -ltotal 12-rw-r--r-- 1 mtm users 3047 Jun 20 10:35 hello.cdrwx------ 2 mtm users 4096 Sep 1 14:28 private/-rw------- 1 mtm users 1081 Sep 1 14:28 story.txt>ls -altotal 28drwx------ 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.cdrwx------ 2 mtm users 4096 Sep 1 14:28 private/-rw------- 1 mtm users 1081 Sep 1 14:28 story.txt
32מבוא לתכנות מערכות - 234122
ניהול תיקיות
הדפסת שם התיקיה הנוכחית ע"י הפקודהpwd:
> pwd ניתן להחליף את התיקיה הנוכחית ע"י הפקודהcd:
> cd <directory> ניתן ליצור תיקיה חדשה ע"י הפקודהmkdir:
> mkdir <name> ע"י הפקודה ריקהניתן למחוק תיקיה rmdir:
> rmdir <directory>
33מבוא לתכנות מערכות - 234122
ניהול תיקיות - דוגמאות>cd ~>pwd/usr/030/moshe>cd matammatam: No such file or directory.>mkdir matam>cd matam>pwd/usr/030/moshe/matam>cd ..>rmdir matam
מעבר לתיקית הבית בעזרת הקיצור ~
בכל הפקודות, אם אחד הפרמטרים אינו תקין תודפס הודעת שגיאה
מתאימה והפקודה תופסק
מעבר לתיקית האב בעזרת הסימון ..
34מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים הפקודהcp משמשת להעתקת קבצים או תיקיות:ניתן להשתמש בפקודה בשתי דרכים
> cp [options] <file1> <file2>file2 בשם file1יוצרת העתק חדש של –
> cp [options] <file1> ... <file> <directory>יוצרת העתקים חדשים של כל הקבצים בתיקיה קיימת–
( אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלףoverwritten)
:דגלים שימושיים–-rמבצע העתקה רקורסיבית של תיקיות ותוכנן :
ללא דגל זה תיקיות אינן מועתקות•
–-iמבקש אישור לפני מחיקת קובץ קיים :
35מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים הפקודהmv קבצים או תיקיות או שינוי שמם להעברתמשמשת:ניתן להשתמש בפקודה בשתי דרכים
> mv [options] <file1> <file2>file2 ל-file1משנה את שמו של –
עובדת גם עבור תיקיות–
> mv [options] <file1> ... <file> <directory>אם הפרמטר האחרון הוא שם של תיקיה קיימת הפקודה מעבירה את הקבצים –
לתוכה
( אם קיים כבר קובץ בעל השם המבוקש הוא נמחק ומוחלףoverwritten)
:דגלים שימושיים–-iמבקש אישור לפני מחיקת קובץ קיים :
36מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים
הפקודהrm :מאפשרת מחיקת קבצים או תיקיות
> rm [ options ] <files>:דגלים שימושיים
–-rמבצע מחיקה רקורסיבית של תיקיות :
ללא דגל זה ספריות אינן נמחקות•
–-iמבקש אישור לפני מחיקת קובץ :
–-fלא מבקש אישור בשום מקרה :
שימו לב: לא ניתן לשחזר קבצים שנמחקו
הפקודה הבאה מוחקת את כל הקבצים והספריות במיקום הנוכחי ועלולהלהיות הרסנית למדי:
> rm -rf *
37מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים - דוגמאות
>lshello.c private/ story.txt>cp hello.c prog.c>lshello.c private/ prog.c story.txt>mv prog.c private/program.c>lshello.c private/ story.txt>ls privateexample.txt program.c>mv hello.c story.txt private>lsprivate/
38מבוא לתכנות מערכות - 234122
פקודות לניהול קבצים - דוגמאות
>ls privateexample.txt hello.c program.c story.txt>rm -i private/story.txt rm: remove regular file `private/story.txt'? y>rm privaterm: cannot remove directory `private': Is a directory>rm -ri privaterm: descend into directory `private'? n>rm -rf private>ls>
39מבוא לתכנות מערכות - 234122
הדפסת תוכן של קבצים הפקודהcat מדפיסה למסך את תוכן הקובץ
> cat <file>אם הקובץ גדול המסך יגלול ולא נוכל לראות בנוחות את התחלתו–
אם לא מופיע שם קובץ הפקודה מדפיסה את הקלט הסטנדרטי )בד"כ קלט –מהמקלדת(
בהמשך נראה למה זה מועיל•
הפקודהmore מדפיסה למסך את התוכן, אך עוצרת כאשר נגמר המקום
> more <file> תגרום להדפסת שורה נוספתenterלחיצה על –
תפסיק את ההדפסהqלחיצה על –
הפקודהless היא שיפור שלmoreומאפשרת גלילה בשני הכיוונים ועוד אפשרויות
> less <file>
40מבוא לתכנות מערכות - 234122
הרשאות קבצים
לכל קובץ יש הרשאות הקובעות למי מותרת הגיש לקובץ ולצורך אילופעולות.
סוגי משתמשים3ישנם :.1User .בעל הקובץ -
בעל הקובץ הוא המשתמש שיצר את הקובץ במערכת.•
.2Group משתמש אשר שייך לקבוצה של בעל קובץ -
הגדרת קבוצות משתמשים הינה מחוץ לחומר הקורס•
.3Other שאר המשתמשים במערכת -
הרשאות שונות3לכל סוג משתמש יש :.1Read )מאפשרת קריאת תוכן הקובץ )כולל העתקתו -
.2Write מאפשרת שינוי הקובץ הקיים -
.3Execute מאפשרת להריץ את הקובץ -
41מבוא לתכנות מערכות - 234122
user group other
הרשאות קבצים
כדי לראות מהן ההרשאות ניתן להשתמש בפקודה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/
:שורת ההרשאות עבור כל קובץ היא רצף האותיות הבא
d r w x r w x r w x
אם מופיעה אות ההרשאה קיימת–
אם מופיע מקף ההרשאה אינה קיימת–
מצייני ההרשאות
מציין אם dהתו מדובר בתיקיה
42מבוא לתכנות מערכות - 234122
שינוי הרשאות קבציםבעל הקובץ רשאי לשנות את ההרשאות של הקובץ שינוי ההרשאות ניתן בעזרת הפקודהchmod:
> chmod <mode> <files>–<mode-שרשור תווים המורכב מ - >who, opcode-ו permission.a, ברירת המחדל היא whoאם לא מצוין –
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-xr--r--r--rwxr-xr--
43מבוא לתכנות מערכות - 234122
הרשאות עבור תיקיות
:עבור תיקיות להרשאות המשמעות שונה–Read רשימת הקבצים– הרשאה לראות את
–Write בתיקייה קבצים שינויתיקייה או מחיקת/יצירת– הרשאה של
–Execute לתיקייה כניסה– הרשאת
?לדוגמה, מה ההרשאות הנדרשות לביצוע כל אחת מהפעולות הבאות> cd my_dir> mkdir directory> rmdir directory> ls
ExecuteWriteWriteRead
44מבוא לתכנות מערכות - 234122
manהפקודה המידע שהוצג כאן לגבי כל אחד מהפקודות חלקי ניתן בכל שלב להשתמש בפקודהman כדי לראות קובץ עזרה עבור
פקודה מסוימת.
> man <command name> של פקודה מכיל את צורת ההפעלה שלה, דגלים אפשריים ועוד.manה-–
:למשל
> man ls
> man rm
> man man
45מבוא לתכנות מערכות - 234122
ערוצי קלט/פלט
לכל תכנית יש ערוצי קלט וערוצי פלט – אלו הם הדרכים בהם היא מקבלתקלט ומציגה את הפלט שלה
-לכל תכנית קיימים בUNIX 3:ערוצי ברירת מחדל : ממנו מקבלת התכנית את הקלטערוץ הקלט הסטנדרטי–
ברירת המחדל היא הפקודות המוכנסות בחלון הטרמינל•
: אליו מודפס הפלטערוץ הפלט הסטנדרטי–
ברירת מחדל היא הדפסה לחלון הטרמינל•
: ערוץ פלט נוסף המשמש להדפסת הודעות שגיאהערוץ השגיאות הסטנדרטי–
ברירת המחדל היא הדפסה לחלון הטרמינל•
ערוצי קלט/פלט נוספים יכולים להיות למשל קבצים, נתייחס למקרים אלובהמשך הקורס
46מבוא לתכנות מערכות - 234122
הפניית קלט/פלטבעת קריאה לפקודה בטרמינל ניתן להפנות את ערוצי הקלט והפלט הסטנדרטיים לקבצים הפניית ערוץ הפלט הסטנדרטי נעשית באמצעות האופרטור"<":
> command [arguments] > <output_file>
הפניית ערוץ הקלט הסטנדרטי נעשית באמצעות האופרטור">":> command [arguments] < <input_file>
הפניית ערוץ הפלט וערוץ השגיאות הסטנדרטי נעשית באמצעות באופרטור"<&":> command [arguments] >& <output_and_errors_file>
אם ננסה לכתוב לתוך קובץ קיים הפקודה לא תתבצע כדי למחוק את הקובץ הקיים ולהחליפו"!"ניתן להוסיף –
-או "<<"אם ברצוננו להוסיף את הפלט להמשכו של קובץ קיים ניתן להשתמש ב )בהתאמה("<<&"
אם הקובץ לא קיים עדיין"!"במקרה זה יש להוסיף –
47מבוא לתכנות מערכות - 234122
הפניית קלט/פלט
ניתן להפנות מספר ערוצים בבת אחת:הפניית הקלט והפלט יחדיו נעשית כך
> command [arguments] < input > output
:כדי להפנות את ערוץ השגיאות בנפרד מערוץ הפלט ניתן לרשום
> (command [arguments] > output) >& errors
כדי להפנות כל אחד מהערוצים לקובץ שונה, תוך וידוא שהקבצים ירשמומחדש אם הם קיימים יש לכתוב:
> (command [arguments] < input >! output) >&! errors
48מבוא לתכנות מערכות - 234122
הפניית קלט/פלט - דוגמאות בעזרת הפניית קלט/פלט ניתן לעשות שימושים שונים בפקודהcat:למשל
>cat > file.txt
Hello world!
>ls
file.txt
>cat file.txt
Hello world!
>cat file.txt > file2.txt
>cat file2.txt
Hello world!
>cat file.txt >> file2.txt
>cat file2.txt
Hello world!
Hello world!
הכנסת קלט מהמקלדת
49מבוא לתכנות מערכות - 234122
הפניית קלט/פלט - דוגמאות
>cat < file2.txt > file.txt
file.txt: File exists.
>cat < file2.txt >! file.txt
>cat file.txt
Hello world!
Hello world!
>rmdir foo
rmdir: `foo': No such file or directory
>rmdir foo > output.txt
rmdir: `foo': No such file or directory
>rmdir foo >& error.txt
>cat error.txt
rmdir: `foo': No such file or directory
הודעת השגיאה נשלחת לערוץ השגיאות ולכן אינה מופנית לקובץ
51מבוא לתכנות מערכות - 234122
Hello world-ב stud-נדגים כעת כיצד ניתן לכתוב תכנית על ה studולהריצה
:לשם כך עלינו לעבור את השלבים הבאיםstudל- התחברות1.
ראינו כבר כיצד ניתן לעשות זאת במספר דרכים•
הקוד בעורך כלשהו כתיבת2.
(compilerהקוד בעזרת מהדר )הידור 3.
הקוד הרצת4.
52מבוא לתכנות מערכות - 234122
כתיבת הקודכדי לכתוב קוד נצטרך להשתמש בתכנית כלשהי לעריכת טקסט-מספר עורכי טקסט המותקנים בstud:
:ללא מנשק גרפיתכניות –
•nanoפשוטה לשימוש, אבל לא נוחה לעריכת קוד בטווח הארוך -
•vim מכילה את כל התכונות שמשתמש צריך, אבל דורשת זמן הסתגלות ארוך יותר -
•emacs כבדה וגם דורשת קצת זמן הסתגלות אבל בעלת אפשרויות רבות למשתמשים -מתקדמים
:בעלות מנשק גרפיתכניות –
•gvim גרסה גרפית של -vim•nedit -דומה להתנהגות תוכנות דומות ב( תכנית פשוטה לשימוש -Windows אך בעלת )
אפשרויות מתקדמות יותר
•emacs אם מנשק גרפי זמין התוכנה תופעל עם מנשק גרפי -
מומלץ להשקיע דקה-שתיים בכל אחת מהתכניות ולהחליט מה הכי נוח לכם - בסופו שלדבר,לכל משתמש העדפותיו האישיות
53מבוא לתכנות מערכות - 234122
קמפול הקוד
.כדי לקמפל את הקוד שכתבנו לשפת מכונה יש להשתמש בקומפיילר בסביבתUNIX מותקן כקומפיילר ברירת מחדל הקומפיילר gcc
–GNU Compiler Collection
:אופן השימוש
> gcc <flags> <files> -o <output file>
למשל על מנת לקמפל את הקוד בקובץhello.c:
> gcc hello.c -o hello יווצר קובץ הרצה בשם המתאיםאין שגיאות אם ערוץ השגיאותהן יודפסו למסך לקיימות שגיאות אם
54מבוא לתכנות מערכות - 234122
gccשימוש ב- אם הדגל-o אינו מוגדר הקומפיילר יבחר בשם קובץ הפלט a.out
כברירת מחדל
הדגל-g-משמש להוספת מידע הנחוץ ל debuggerכשאתם מתכננים לדבג הקפידו להשתמש בדגל זה–
יכול להדפיס מידע מדויק על השורות בהן קורות debuggerבעזרת דגל זה ה-–השגיאות
:ניתן לקמפל מספר קבצים בבת אחת
> gcc file1.c file2.c files3.c –o my_prog
> gcc *.c –o my_prog
55מבוא לתכנות מערכות - 234122
gccשימוש ב-:במהלך הקורס נדרוש לקמפל את הקוד עם הדגלים הבאים
> gcc -std=c99 -Wall -Werror -pedantic-errors ...:משמעות הדגלים
–-std=c99 קובע את הסטנדרט :C99המוסיף כמה תכונות חשובות לשפה
–-Wall מציג את כל האזהרות האפשריות. אזהרות הן בעיות בקוד שאמנם ניתן :להדר אך בדרך כלל מעידות על באגים
–-Werrorמתייחס לאזהרה כאל שגיאה :
אין הצדקה לקוד המתקמפל עם אזהרות ולכן הדרישה בקורס היא לקוד •המתקמפל ללא אזהרות
–-pedantic-errors מגביל את הקוד לסטנדרט הנבחר כך שדברים אשר המהדר :יודע להתמודד איתם אך אינם חלק מהסטנדרט ייחשבו כשגיאות
מאחר והם מקלים על העבודה תמיד להשתמש בדגלים אלו מומלץ (חובה במהלך הקורסומשפרים את איכות הקוד )
56מבוא לתכנות מערכות - 234122
הרצת הקוד
לאחר הקומפילציה מתקבל קובץ הרצהכאמור, אין לקובץ סיומת מיוחדת–
–gccדואג בצורה אוטומטית להוסיף הרשאות ריצה לקובץ
בשביל להריץ את הקובץ עלינו לרשום את שמו כשם הפקודה להרצהלהרצת פקודה בספריה הנוכחית יש להוסיף “./” לפי שם הקובץ–
בהמשך נראה כיצד ניתן לאפשר לקובץ לרוץ ללא הוספת “./”–
> ./helloHello World!