[ad_1]
حسنًا، بعد RTFM أعرف أن “ربط الوظيفة” يعين “خطأ (أخطاء)” عند الفشل …
1. هل يمكنني الحصول على هذه المعلومات من الكود التالي؟
(أنا لا أطلب “خطأ” محددًا، بل مجرد مؤشر – في الكود – أن الوظيفة تحدد (stderr) “خطأ”.
2. ما هي الطريقة الأكثر مباشرة لاسترداد النص الفعلي للخطأ فعليًا – بافتراض أنه “stderr”؟
أريد فقط إظهاره، ولست بحاجة إلى تسجيله أو حفظه في ملف (والذي يبدو أنه الطريقة الأكثر شيوعًا).
/** * @brief Function template for std::bind. * @ingroup binders */ template<typename _Func, typename... _BoundArgs> inline _GLIBCXX20_CONSTEXPR typename _Bind_helper<__is_socketlike<_Func>::value, _Func, _BoundArgs...>::type bind(_Func&& __f, _BoundArgs&&... __args) { typedef _Bind_helper<false, _Func, _BoundArgs...> __helper_type; return typename __helper_type::type(std::forward<_Func>(__f), std::forward<_BoundArgs>(__args)...); }
ما حاولت:
حاولت دون جدوى بدء العملية وقراءة stderr.
الحل 1
للبدء، لا يمكنك الاعتماد على أي وظيفة مكتبة لضبط stderr على أي شيء. يعد هذا أحد المقابض الثلاثة القياسية للإدخال والإخراج. إنه ليس مخزنًا مؤقتًا للنص، لذا فإن “القراءة” منه ليست خيارًا قابلاً للتطبيق.
الطريقة الأكثر مباشرة هي الاتصال WSAGetLastError
في عالم النوافذ وأماكن أخرى يجب أن يمر errno
إلى الوظيفة strerror
. هنا مقال يصف هذا: كيفية الحصول على رسالة خطأ في مأخذ التوصيل[^]
تعليق ريتشارد صحيح وسؤالك غير واضح على الإطلاق.
عادة عندما يريد المرء أن يكتب ل stderr
أنت تفعل شيئا مثل هذا:
fprintf( stderr, "Error at line %d of %s\n", __LINE__, __FILE__ );
stderr
، يحب stdout
، يمكن إعادة توجيهها إلى ملف أيضًا.
[ad_2]
コメント