IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

rediriger stderr vers chaine [Non suivi]


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut rediriger stderr vers chaine
    Bonjour

    J'ai une fonction qui me fait un fprintf d'un message d'erreur et à laquelle je ne peux pas toucher car elle fait partie d'une librairie open source.

    Or moi je voudrais récupérer ce message dans une chaine. Je sais que c'est faisable mais au prix de quelques bidouilles un peu pointues...

    Comme le file descriptor peut être passé en paramètre de la fonction je vais lui indiquer stderr, mais ensuite comment rediriger ce qui est destiné à stderr vers ma chaîne ?

    C'est assez urgent.

    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Windows / Linux ???

    Sinon (il me semble que ca doit marcher pour les 2 OS)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ./leprogopensource 2> ./monprog
    Tu rediriges stderr du prog open source vers stdint de monprog donc dans monprog tu n'a plus qu'à faire un fgets(buffer, sizeof buffer, stdin);
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Linux, pardon j'ai oublié.

    Sinon merci pour ton info mais ça ne me convient pas car là tout est dans un programme unique. J'utilise une librairie qui fait le fprintf et je dois récupérer le résultat dans mon main. Autant que possible je voudrais éviter de passer par un fichier intermédiaire et/ou system.

    Malheureusement en plus il s'agit de FILE * et pas d'id int car j'aurais peut-être pu utiliser des trucs comme dup2 & cie, mais je maîtrise mal.

    Voilà...

  4. #4
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    j'ai une petite idée mais je suis pas sur de moi :
    tu crée un tube anonyme :
    int tube[2];
    pipe(tube);

    tu dupliques stderr (qui a un descripteur) :
    dup2(tube[1], STDERR_FILENO);

    et tu n'auras qu'à lire :
    read(tube[0], chaine, NBMAX);

  5. #5
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Moi je veux bien mais pourquoi utiliser un tube pour le dubpliquer après. pourquoi ne pas dupliquer sans le tube ?

    J'utilise une librairie qui fait le fprintf et je dois récupérer le résultat dans mon main
    Bon d'une il n'y a pas de librairie en C mais des bibliothèques. Ensuite, pour récupérer le résultat, en effet il semble bien qu'une duplication pourrait servir.

    Autant que possible je voudrais éviter de passer par un fichier intermédiaire et/ou system.
    Et bien là ça va être très dur, en effet, la solution proposée précédement (tube+dup) utilise un fichier intermédiaire (le tube) ...

    Malheureusement en plus il s'agit de FILE * et pas d'id int car j'aurais peut-être pu utiliser des trucs comme dup2 & cie, mais je maîtrise mal.
    Il va falloir apprendre à les utiliser ...

  6. #6
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Bonjour,

    j'ai le même problème mais hélas resté sans soution : Redirection de stdout en C.

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    J'ai une solution, postée dans l'autre thread mais cela utilise dup/close...

    Jc

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par fearyourself
    J'ai une solution, postée dans l'autre thread mais cela utilise dup/close...

    Jc
    Dis toujours ?

  9. #9
    Rédacteur

    Avatar de gege2061
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Juin 2004
    Messages
    5 840
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Juin 2004
    Messages : 5 840
    Points : 11 625
    Points
    11 625
    Par défaut
    Citation Envoyé par elisea
    Citation Envoyé par fearyourself
    J'ai une solution, postée dans l'autre thread mais cela utilise dup/close...

    Jc
    Dis toujours ?
    http://www.developpez.net/forums/vie...603779#2603779

  10. #10
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Sauf que tu fermerais le descripteur 2 à la place de 1 pour rediriger la sortie d'erreur...

    Jc

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 14
    Points : 12
    Points
    12
    Par défaut
    Effectivement ça marche. Merci. Par contre si on boucle sur un while (fgets...) on n'en sort pas.
    Et maintenant... la question inverse: comment revenir au stdout de départ ?
    Parce que en fait je n'ai besoin de faire cela que temporairement pendant l'exécution (mais plusieurs fois).

Discussions similaires

  1. Rediriger stderr vers une liste ?
    Par Cypra dans le forum Général Python
    Réponses: 2
    Dernier message: 21/05/2009, 15h08
  2. Rediriger STDERR vers fichier
    Par blacksnake dans le forum Langage
    Réponses: 1
    Dernier message: 05/11/2007, 00h12
  3. Entier vers chaine
    Par litbos dans le forum C
    Réponses: 6
    Dernier message: 28/10/2005, 14h58
  4. Rediriger STDERR dans un fichier
    Par LeBigornot dans le forum C
    Réponses: 5
    Dernier message: 27/01/2005, 12h49
  5. Rediriger cerr<< ver un MessageBox
    Par philippe V dans le forum C++
    Réponses: 3
    Dernier message: 22/12/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo