Comment puis-je récupérer/imprimer (stderr) ERREUR"?


OK, après RTFM, je sais que la “fonction de liaison” définit “ERREUR(s)” en cas d’échec…
1. Puis-je obtenir de telles informations à partir du code ci-dessous ?
(Je ne demande pas de “ERREUR” spécifique, juste un indicateur – dans le code – que la fonction définit (stderr) “ERREUR”.
2. Quel est le moyen le plus simple de récupérer physiquement le texte réel de l’erreur, en supposant qu’il s’agit de « stderr » ?
Je veux juste le montrer, je n’ai pas besoin de le connecter ou de le sauvegarder dans un FICHIER (ce qui semble être le moyen le plus courant).

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)...);
    }

Ce que j’ai essayé :

J’ai essayé sans succès de démarrer le processus et de lire stderr.

Solution 1

Pour commencer, vous ne pouvez compter sur aucune fonction de bibliothèque pour définir stderr sur quoi que ce soit. C’est l’une des trois poignées standard pour l’entrée et la sortie. Ce n’est pas un tampon de texte, donc en “lire” n’est pas une option viable.

Le moyen le plus simple est d’appeler WSAGetLastError dans le monde windows et ailleurs c’est à passer errno à la fonction strerror. Voici un article qui décrit cela : Comment obtenir un message d’erreur de socket[^]

Le commentaire de Richard est correct et votre question n’est vraiment pas claire du tout.

Normalement, quand on veut écrire stderr tu fais quelque chose comme ça :

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

stderrcomme stdoutpeut également être redirigé vers un fichier.

コメント

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