לדלג לתוכן

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

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

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

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

דוגמה לפלט:

Error code: 2
Error opening file: No such file or directory

רמזים:

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

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

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

דוגמה לפלט:

Attempt to open file: data.txt
Result: failed - No such file or directory (code 2)

רמזים:

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

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

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

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

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

דוגמה לפלט:

Attempt 1: Error opening file: No such file or directory
Attempt 2: Error opening file: Permission denied
Attempt 3: File opened successfully

רמזים:

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

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

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

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

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

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

דוגמה לפלט:

Error opening 'missing.txt': No such file or directory
File 'test.txt' opened successfully
Error opening '/etc/shadow': Permission denied

תרגיל 5 - כתיבת לוג שגיאות לקובץ

כתוב תוכנית שמנסה לפתוח רשימה של 4 קבצים (חלקם קיימים וחלקם לא). עבור כל קובץ שלא הצליח להיפתח, התוכנית כותבת שורת לוג לקובץ בשם errors.log עם הפרטים הבאים: שם הקובץ, קוד השגיאה, ותיאור השגיאה.

דוגמה לתוכן errors.log:

Error: missing1.txt | Code: 2 | Description: No such file or directory
Error: missing2.txt | Code: 2 | Description: No such file or directory

רמזים:

  • פתח את errors.log עם fopen במצב "w" (כתיבה)
  • השתמש ב-fprintf כדי לכתוב לקובץ הלוג
  • השתמש ב-strerror(errno) כדי לקבל את תיאור השגיאה כמחרוזת