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 :

Interception des outputs C/fortran depuis C++


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut Interception des outputs C/fortran depuis C++
    Bonjour,

    Mon but est de bufferiser dans une variable tous les outputs, sur stderr ou stdin de routines appelés dans une librairie qui utilise du C et du fortran.

    Voilà où j'en suis après qques moments passé sur google.

    Si intercepter des outputs (par cout) en C++ est assez simple (utilisation des stringstream et consort), et que pour le C on pour se débroutiller par setbuf/setvbuf, je ne trouve aucun moyen pour intercepter les outputs de program fortran ( la méthode setbuf ne marche pas).

    Je cherche donc un moyen d'intercepter tous les outputs et les enregistrer dans un buffer qui marcherait pour C/fortran..

    Une idée?

  2. #2
    Membre chevronné
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Par défaut
    Il est aussi possible de rediriger les sorties stderr et stdout de tout un programme vers un pipe et de lire ce pipe, tu en penses quoi ?

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634

  4. #4
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut
    Malheureusement l'idée de créer un processus fils pour intercepter les outputs ne me semble pas viable:

    1/ les routines utilisées dont je veux intercepter l'output peuvent être multithreadés via OpenMP
    2/ je travaille de surcroît dans un environnement MPI

    L'idée de forker des processes (un par process MPI) risque de bloquer mes ressources et d'overloader la machine juste pour trapper des outputs....

    A moins que je comprenne pas qqchose.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    La création d'un child process c'est juste pour lancer un exécutable dont tu veux mapper les entrées/sorties (stdin,err,out) sur des pipes maîtrisées par ton processus de bufferisation. Ensuite, que cet exécutable distribue son calcul, grand bien lui fasse du moment que la gestion des I/O est correcte.

  6. #6
    Membre confirmé Avatar de Fortran90
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2006
    Messages : 83
    Par défaut
    Si par exemple j'ai 4 coeurs sur ma machine...
    Je lance le programme sur 1 process.
    Je spawne un process pour trapper les outputs.
    Le process spawné va utiliser des pragmas OpenMP ou autres, sur 4 threads.

    Si je compte bien ça fait 5 processes sur une machine de 4 coeurs. Et ça c'est pas bon. Il faut bien que le process père continue à vivre pour récupérer les out de son fils via le pipe...

    On a donc un process en trop qui spin à 100% de consommation CPU, pour rien. Enfin si pour des outputs qui arriveront plus lentement...

Discussions similaires

  1. [Débutant] Intercepter des Erreurs depuis un DataGriview lié.
    Par boby15000 dans le forum VB.NET
    Réponses: 0
    Dernier message: 20/03/2015, 14h00
  2. [WD16] Intercepter des Evenements Windows depuis une classe
    Par dahlback dans le forum WinDev
    Réponses: 8
    Dernier message: 15/01/2013, 13h55
  3. Intercepter des Evenements Windows depuis une classe
    Par jimmypage dans le forum WinDev
    Réponses: 4
    Dernier message: 13/07/2012, 17h01
  4. interception des output console
    Par r0d dans le forum C#
    Réponses: 2
    Dernier message: 19/10/2011, 14h08
  5. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55

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