לדלג לתוכן

4.8 טיפול בשגיאות תרגול

תרגיל 1 - שימוש ב-errno ו-perror

כתוב תוכנית שמנסה לפתוח קובץ שלא קיים בעזרת fopen, ואם הפתיחה נכשלה:

  1. הדפס את קוד השגיאה המספרי מ-errno.
  2. הדפס הודעת שגיאה קריאה בעזרת perror.
  3. סיים את התוכנית עם קוד יציאה 1.

דוגמה לפלט:

קוד שגיאה: 2
שגיאה בפתיחת הקובץ: No such file or directory

רמזים:

  • כלול את <errno.h> ואת <stdio.h>
  • בדוק אם fopen מחזירה NULL

תרגיל 2 - שימוש ב-strerror

כתוב תוכנית שמנסה לפתוח קובץ שלא קיים, ובמקום להשתמש ב-perror, משתמשת ב-strerror כדי לבנות הודעת שגיאה מותאמת אישית עם printf.

דוגמה לפלט:

ניסיון לפתוח את הקובץ: data.txt
תוצאה: נכשל - No such file or directory (קוד 2)

רמזים:

  • כלול את <string.h> עבור strerror
  • השתמש ב-strerror(errno) בתוך printf

תרגיל 3 - בדיקת שגיאות מרובות

כתוב תוכנית שמבצעת שלוש פעולות שיכולות להיכשל, ולכל אחת בודקת ומטפלת בשגיאה:

  1. פתיחת קובץ שלא קיים (fopen על קובץ לא קיים).
  2. פתיחת תיקייה ללא הרשאות (fopen על /etc/shadow למשל).
  3. פתיחת קובץ תקין (למשל /etc/hostname או כל קובץ שבטוח קיים).

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

דוגמה לפלט:

ניסיון 1: שגיאה בפתיחת הקובץ: No such file or directory
ניסיון 2: שגיאה בפתיחת הקובץ: Permission denied
ניסיון 3: הקובץ נפתח בהצלחה

רמזים:

  • אל תשכח לסגור את הקובץ עם fclose אם הפתיחה הצליחה
  • שימו לב לבדוק NULL אחרי כל fopen

תרגיל 4 - פונקציה עם טיפול בשגיאות

כתוב פונקציה בשם safe_open שמקבלת שם קובץ ומצב פתיחה (כמו "r" או "w"), מנסה לפתוח את הקובץ, ואם נכשלה - מדפיסה הודעת שגיאה מפורטת (עם שם הקובץ ותיאור השגיאה) ומחזירה NULL.

ב-main, השתמש בפונקציה הזו כדי לנסות לפתוח שלושה קבצים - אחד שקיים, אחד שלא קיים, ואחד ללא הרשאות.

חתימת הפונקציה:

FILE *safe_open(const char *filename, const char *mode);

דוגמה לפלט:

שגיאה בפתיחת '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) כדי לקבל את תיאור השגיאה כמחרוזת