C:
การเขียนไปยังข้อผิดพลาดมาตรฐาน
วิธีการ:
ในภาษา C สามารถใช้กระแส stderr
เพื่อเขียนข้อความแสดงข้อผิดพลาด ไม่เหมือนกับการเขียนไปยังผลลัพธ์มาตรฐานด้วย printf
, การเขียนไปยัง stderr
สามารถทำได้โดยใช้ fprintf
หรือ fputs
นี่คือวิธีที่คุณทำได้:
#include <stdio.h>
int main() {
fprintf(stderr, "This is an error message.\n");
fputs("This is another error message.\n", stderr);
return 0;
}
ผลลัพธ์ตัวอย่าง (ไปยัง stderr):
This is an error message.
This is another error message.
สำคัญที่จะต้องทราบว่าในขณะที่ผลลัพธ์อาจดูคล้ายกับ stdout
ในคอนโซล เมื่อใช้การเปลี่ยนทิศทางในเทอร์มินัล ความแตกต่างจะชัดเจนขึ้น:
$ ./your_program > output.txt
คำสั่งนี้เปลี่ยนทิศทางเฉพาะผลลัพธ์มาตรฐานไปยัง output.txt
, ในขณะที่ข้อความแสดงข้อผิดพลาดยังปรากฏบนหน้าจอ
การศึกษาเจาะลึก
ความแตกต่างระหว่าง stdout
และ stderr
ในระบบที่ใช้ Unix มีมาตั้งแต่วันแรกของภาษา C และ Unix การแยกนี้ช่วยให้มีการจัดการข้อผิดพลาดและการบันทึกได้อย่างมีประสิทธิภาพมากขึ้น เนื่องจากช่วยให้โปรแกรมเมอร์สามารถเปลี่ยนทิศทางข้อความแสดงข้อผิดพลาดได้โดยไม่ขึ้นกับผลลัพธ์มาตรฐานของโปรแกรม ขณะที่ stderr
เป็น unbuffered โดยค่าเริ่มต้นเพื่อให้มั่นใจว่าข้อความแสดงข้อผิดพลาดสามารถแสดงผลได้ทันที ซึ่งช่วยในการดีบั๊กการล่มสลายและปัญหาสำคัญอื่น ๆ ในขณะที่ stdout
โดยปกติจะมีการบัฟเฟอร์ หมายความว่าผลลัพธ์อาจล่าช้าจนกว่าบัฟเฟอร์จะถูกล้าง (เช่น การเสร็จสิ้นโปรแกรมหรือการล้างด้วยตนเอง)
ในแอพพลิเคชันสมัยใหม่ การเขียนไปยัง stderr
ยังคงมีความเกี่ยวข้องอย่างยิ่ง โดยเฉพาะสำหรับเครื่องมือบรรทัดคำสั่งและแอพพลิเคชันเซิร์ฟเวอร์ที่ความแตกต่างระหว่างข้อความบันทึกปกติและข้อผิดพลาดเป็นสิ่งสำคัญ อย่างไรก็ตาม สำหรับการจัดการข้อผิดพลาดที่ซับซ้อนยิ่งขึ้น โดยเฉพาะในแอพพลิเคชันที่มี GUI หรือที่ต้องการกลไกการบันทึกที่ซับซ้อนยิ่งขึ้น โปรแกรมเมอร์อาจใช้ไลบรารีการบันทึกที่เฉพาะเจาะจงซึ่งให้การควบคุมที่ดีกว่าเกี่ยวกับการจัดรูปแบบข้อความ ปลายทาง (เช่น ไฟล์ ตามเครือข่าย) และระดับความรุนแรง (ข้อมูล คำเตือน ข้อผิดพลาด ฯลฯ)
ในขณะที่ stderr
ให้กลไกพื้นฐานสำหรับการรายงานข้อผิดพลาดในภาษา C การพัฒนาของปฏิบัติการโปรแกรมและการมีอยู่ของเฟรมเวิร์กการบันทึกขั้นสูงหมายความว่ามันมักเป็นเพียงจุดเริ่มต้นสำหรับกลยุทธ์การจัดการข้อผิดพลาดสมัยใหม่