¿Cómo recupero/imprimo (stderr) ERROR?"?

programación


Bien, después de RTFM sé que la “función vinculante” establece “ERROR(es)” en caso de falla…
1. ¿Puedo obtener dicha información del siguiente código?
(No estoy pidiendo un “ERROR” específico, solo un indicador, en código, de que la función establece (stderr) “ERROR”.
2. ¿Cuál es la forma más sencilla de recuperar físicamente el texto real del error, suponiendo que sea “stderr”?
Sólo quiero mostrarlo, no necesito registrarlo ni guardarlo en un ARCHIVO (que parece ser la forma más común).

C++
/**
   *  @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)...);
    }

Lo que he probado:

Intenté iniciar el proceso sin éxito y leí stderr.

Solución 1

Para empezar, no puede confiar en que ninguna función de la biblioteca haya configurado stderr en nada. Ese es uno de los tres identificadores estándar para entrada y salida. No es un búfer de texto, por lo que “leerlo” no es una opción viable.

La forma más sencilla es llamar WSAGetLastError en el mundo de windows y en otros lugares es pasar errno a la función strerror. Aquí hay un artículo que describe esto: Cómo recibir un mensaje de error de socket[^]

El comentario de Richard es correcto y su pregunta realmente no está nada clara.

Normalmente cuando uno quiere escribir a stderr haces algo como esto:

C++
fprintf( stderr, "Error at line %d of %s\n", __LINE__, __FILE__ );

stderrcomo stdouttambién se puede redirigir a un archivo.

コメント

タイトルとURLをコピーしました