0Pricing
C++ Academy · درس

التعامل مع std::cerr وstd::clog

افصل التشخيصات والسجلات عن مخرجات البرنامج باستخدام مجريَي cerr وclog.

التعامل مع std::cerr وstd::clog درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.

تدفقات الإخراج الثلاثة

تعرض المكتبة القياسية ثلاثة تدفقات إخراج معرّفة مسبقًا:

  • std::cout — الإخراج القياسي المخزّن مؤقتًا
  • std::cerr — الخطأ القياسي غير المخزّن مؤقتًا
  • std::clog — الخطأ القياسي المخزّن مؤقتًا

std::cerr: الأخطاء والتحذيرات

يكتب std::cerr إلى stderr، وهو غير مخزّن مؤقتًا — لذلك يظهر الإخراج فورًا، حتى إذا تعطل البرنامج بعد ذلك مباشرةً.

std::cerr << "Error: file not found\n";

std::clog: السجلات المخزّنة مؤقتًا

يكتب std::clog أيضًا إلى stderr، لكنه مخزّن مؤقتًا مثل cout. استخدمه للسجلات الاعتيادية عندما يكون التأخير البسيط مقبولًا.

std::clog << "[info] processing record 42\n";

لماذا يوجد مجريان للكتابة إلى stderr؟

يجب أن تظهر الأخطاء فورًا حتى يراها المستخدم قبل حدوث التعطل. أما السجلات فحجمها كبير — ويساعد تخزينها مؤقتًا في الحفاظ على أداء مقبول.

إعادة توجيه الإخراج

في سطر الأوامر، يذهب stdout وstderr إلى قناتين منفصلتين. أعد توجيههما بشكل مستقل.

# Send stdout to a file, stderr to the terminal
./app > out.txt

# Send stderr to a file too
./app 2> err.txt

# Send both to one file
./app > all.txt 2>&1

إخراج التشخيص مقابل إخراج البيانات

وفقًا للعرف، تُرسل البيانات القابلة للقراءة آليًا إلى stdout، بينما تُرسل معلومات التشخيص الموجهة للبشر إلى stderr. يتيح ذلك عمل سلاسل الأوامر بطريقة سليمة.

ربط المجاري معًا

يكون cin مرتبطًا بـ cout افتراضيًا — فالقراءة من cin تفرغ cout أولًا. ويرتبط cerr بـ cout بالطريقة نفسها.

تسجيل مخصص بمستويات

غلّف clog داخل دوال مساعدة لمستويات السجل — INFO وWARN وERROR. يحافظ ذلك على اتساق رسائل السجل.

void warn(const std::string& msg) {
    std::clog << "[WARN] " << msg << "\n";
}

void error(const std::string& msg) {
    std::cerr << "[ERROR] " << msg << "\n";
}

الأداء: cerr بطيء

نظرًا إلى أن cerr يفرغ مخرجاته مع كل عملية، فإن عمليات الكتابة المتكررة تكون بطيئة. وللتسجيل المكثف، فضّل استخدام clog أو مكتبة تسجيل مخصصة.

تفريغ clog يدويًا

إذا أردت أن يظهر إخراج clog فورًا لأغراض تصحيح الأخطاء، فقم بتفريغه يدويًا.

std::clog << "checkpoint" << std::flush;

الكتابة إلى مجرى ملف

تنطبق الأنماط نفسها على مجاري الملفات. افتح ملف سجل باستخدام std::ofstream واكتب إليه بالطريقة نفسها التي تستخدمها مع clog.

std::ofstream logFile("app.log");
logFile << "Application started\n";

تحقق سريع

أي مجرى قياسي يُفرَّغ تلقائيًا بعد كل عملية كتابة؟

مراجعة

استخدم std::cout للإخراج العادي، وstd::cerr للأخطاء العاجلة غير المخزّنة مؤقتًا، وstd::clog للسجلات المخزّنة مؤقتًا. أعد توجيهها بشكل مستقل في الصدفة باستخدام > و2>.

الأسئلة الشائعة

هل درس «التعامل مع std::cerr وstd::clog» مجاني؟

نعم — نص درس «التعامل مع std::cerr وstd::clog» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.

ماذا ستتعلم في «التعامل مع std::cerr وstd::clog»؟

افصل التشخيصات والسجلات عن مخرجات البرنامج باستخدام مجريَي cerr وclog. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟

لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «التعامل مع std::cerr وstd::clog»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟

نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. استخدام std::cin وstd::cout بطريقة صحيحة
  2. تنسيق الإخراج باستخدام iomanip
  3. قراءة الإدخال بأمان باستخدام getline
  4. التعامل مع std::cerr وstd::clog
← العودة إلى C++ Academy