כתיבה לשגיאת סטנדרט

C:
כתיבה לשגיאת סטנדרט

איך לעשות:

בשפת C, הזרם stderr משמש לכתיבת הודעות שגיאה. בניגוד לכתיבה לפלט רגיל עם printf, ניתן לכתוב לstderr באמצעות fprintf או fputs. הנה איך אפשר לעשות זאת:

#include <stdio.h>

int main() {
    fprintf(stderr, "זוהי הודעת שגיאה.\n");

    fputs("זוהי הודעת שגיאה נוספת.\n", stderr);
    
    return 0;
}

דוגמה לפלט (ל-stderr):

זוהי הודעת שגיאה.
זוהי הודעת שגיאה נוספת.

חשוב לציין שאף שהפלט נראה דומה לstdout בקונסול, כאשר משתמשים בהפנייה בטרמינל, ההבדל הופך להיות ברור:

$ ./your_program > output.txt

פקודה זו מפנה את הפלט הרגיל בלבד לoutput.txt, בעוד הודעות השגיאה עדיין יופיעו על המסך.

טבילה עמוקה

ההבדל בין stdout לstderr במערכות המבוססות על יוניקס חוזר לימי ההתחלה של C ויוניקס. הפרדה זו מאפשרת טיפול חזק יותר בשגיאות ותיעוד, שכן היא מאפשרת למתכנתים להפנות הודעות שגיאה באופן עצמאי מפלט התכנית הרגיל. למרות שstderr אינו ממותן כברירת מחדל כדי להבטיח פלט מיידי של הודעות שגיאה, מה שעוזר בניפוי קריסות ובעיות קריטיות אחרות, stdout הוא ממותן בדרך כלל, כלומר הפלט שלו עשוי להידחות עד שהחוצץ מתרוקן (לדוגמה, בשלמות התכנית או ריקון ידני).

ביישומים מודרניים, הכתיבה לstderr עדיין רלוונטית, במיוחד לכלים שורת פקודה ויישומי שרתים, שבהם ההבחנה בין הודעות יומן רגילות להודעות שגיאה היא קריטית. עם זאת, לטיפול מורכב יותר בשגיאות, במיוחד ביישומי גרפיקה ממוחשבת או שבהם דרושים מנגנוני תיעוד מתקדמים יותר, ייתכן שמתכנתים ישתמשו בספריות תיעוד מוקדשות המספקות שליטה רבה יותר על פורמט ההודעות, יעדים (למשל, קבצים, רשת) ורמות חומרה (מידע, אזהרה, שגיאה וכו’).

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