4.8 טיפול בשגיאות תרגול
תרגיל 1 - שימוש ב-errno ו-perror¶
כתוב תוכנית שמנסה לפתוח קובץ שלא קיים בעזרת fopen, ואם הפתיחה נכשלה:
- הדפס את קוד השגיאה המספרי מ-
errno. - הדפס הודעת שגיאה קריאה בעזרת
perror. - סיים את התוכנית עם קוד יציאה 1.
דוגמה לפלט:
רמזים:
- כלול את
<errno.h>ואת<stdio.h> - בדוק אם
fopenמחזירהNULL
תרגיל 2 - שימוש ב-strerror¶
כתוב תוכנית שמנסה לפתוח קובץ שלא קיים, ובמקום להשתמש ב-perror, משתמשת ב-strerror כדי לבנות הודעת שגיאה מותאמת אישית עם printf.
דוגמה לפלט:
רמזים:
- כלול את
<string.h>עבורstrerror - השתמש ב-
strerror(errno)בתוךprintf
תרגיל 3 - בדיקת שגיאות מרובות¶
כתוב תוכנית שמבצעת שלוש פעולות שיכולות להיכשל, ולכל אחת בודקת ומטפלת בשגיאה:
- פתיחת קובץ שלא קיים (
fopenעל קובץ לא קיים). - פתיחת תיקייה ללא הרשאות (
fopenעל/etc/shadowלמשל). - פתיחת קובץ תקין (למשל
/etc/hostnameאו כל קובץ שבטוח קיים).
עבור כל פעולה, הדפס אם היא הצליחה או נכשלה, ובמקרה של כשלון - הדפס את הודעת השגיאה עם perror.
דוגמה לפלט:
ניסיון 1: שגיאה בפתיחת הקובץ: No such file or directory
ניסיון 2: שגיאה בפתיחת הקובץ: Permission denied
ניסיון 3: הקובץ נפתח בהצלחה
רמזים:
- אל תשכח לסגור את הקובץ עם
fcloseאם הפתיחה הצליחה - שימו לב לבדוק
NULLאחרי כלfopen
תרגיל 4 - פונקציה עם טיפול בשגיאות¶
כתוב פונקציה בשם safe_open שמקבלת שם קובץ ומצב פתיחה (כמו "r" או "w"), מנסה לפתוח את הקובץ, ואם נכשלה - מדפיסה הודעת שגיאה מפורטת (עם שם הקובץ ותיאור השגיאה) ומחזירה NULL.
ב-main, השתמש בפונקציה הזו כדי לנסות לפתוח שלושה קבצים - אחד שקיים, אחד שלא קיים, ואחד ללא הרשאות.
חתימת הפונקציה:
דוגמה לפלט:
שגיאה בפתיחת 'missing.txt': No such file or directory
הקובץ 'test.txt' נפתח בהצלחה
שגיאה בפתיחת '/etc/shadow': Permission denied
תרגיל 5 - כתיבת לוג שגיאות לקובץ¶
כתוב תוכנית שמנסה לפתוח רשימה של 4 קבצים (חלקם קיימים וחלקם לא). עבור כל קובץ שלא הצליח להיפתח, התוכנית כותבת שורת לוג לקובץ בשם errors.log עם הפרטים הבאים: שם הקובץ, קוד השגיאה, ותיאור השגיאה.
דוגמה לתוכן errors.log:
שגיאה: missing1.txt | קוד: 2 | תיאור: No such file or directory
שגיאה: missing2.txt | קוד: 2 | תיאור: No such file or directory
רמזים:
- פתח את
errors.logעםfopenבמצב"w"(כתיבה) - השתמש ב-
fprintfכדי לכתוב לקובץ הלוג - השתמש ב-
strerror(errno)כדי לקבל את תיאור השגיאה כמחרוזת