سؤال

لديّ streams مختلفان ، أحدهما cerr ، باستخدام نفس Streambuffer ، لدي بعض المكتبات في تلك التي قد تعديل cerr بطريقة ما ، (أعلام؟ المعدلات التنسيق؟).

cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);

cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";

مطبوعات:

This
is
a
test
This is a teststream test

تصحيح الأخطاء mystreambuffer لقد لاحظت أن CERR يتصل mystreambuffer->sync() كل << العملية بينما TestStream لا تسميها على الإطلاق.
إذا كنت على صواب cerr هل مجرد Ostream قياسي ، إذن ، لماذا أرى هذا الاختلاف في أوقات التدفق؟ كيف يمكنني إعادة تعيين CERR مرة أخرى إلى عمليات التنظيف العادية؟

تعديل: أرى أنكم تعلقون على Unitbuf وأنها افتراضية في Cerr ، ولكن إذا كان ذلك افتراضيًا ، فلن يكتب خطوة بخطوة هنا أيضًا؟

#include <iostream>
int main(){
    std::cerr << "This " << " is " << " a cerr " << " test\n";
    std::cout << "This " << " is " << " a cout " << " test\n";
}
Cobain /tmp$ ./test 
This  is  a cerr  test
This  is  a cout  test
هل كانت مفيدة؟

المحلول

محاولة std::cerr.unsetf( std::ios_base::unitbuf );. هذا العلم قيد التشغيل cerr بشكل افتراضي.

نصائح أخرى

IOS :: unitbuf العلم هو السبب الذي تم تعيينه على الافتراضي لـ CERR.

تحتاج إلى استخدام معالج Nounitbuf من أجل إصلاحه. قد لا تملك بعض المكتبات القديمة ، إذا كان الأمر كذلك ، فاستخدم unsetf.

تحرير: الإعداد الافتراضي لـ Unitbuf يعتمد على التنفيذ :)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top