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

Langage C++ Discussion :

Conversion ostream* en FILE*


Sujet :

Langage C++

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Conversion ostream* en FILE*
    Bonjour,

    Je travaille avec du code tantôt C++ tantôt à la C, et j'aimerais pour un même fichier de sortie, ouvert comme ostream*, appeler des fonctions C++ qui écrivent dans un ostream* (pas de problème ici) ET appeler des fonctions à la C qui écrivent dans un FILE* (le passage de paramètre doit être FILE*).

    Il y a-t-il un moyen de convertir mon ostream* en FILE* ? (un peu comme la méthode c_str() pour convertir les string en char*)

    Sinon, il faudra que je réécrive beaucoup de fonctions, et le travail sera sensiblement égal dans le sens C vers C++ comme dans l'autre...

    Donc je croise les doigts pour l'un de vous ait la solution!!

  2. #2
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Bonjour,

    Je travaille avec du code tantôt C++ tantôt à la C,
    Pas bien, tu ne peux pas travailler en full C++ ?

    Il y a-t-il un moyen de convertir mon ostream* en FILE* ? (un peu comme la méthode c_str() pour convertir les string en char*)
    Rien de standard, De mémoire, certains compilateur le font (VS mais pas sur )

    Sinon, il faudra que je réécrive beaucoup de fonctions, et le travail sera sensiblement égal dans le sens C vers C++ comme dans l'autre...
    Faut juste que tu passes en full C++
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Février 2006
    Messages
    153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 153
    Points : 168
    Points
    168
    Par défaut
    Bonjour

    Si tu manipules des std::ostream, ca me semble compromis, car ce n'est pas (forcement) un fichier. Pour un fichier, il faudrait un std::ofstream. Mais même avec un std::ofstream, comme indiqué par Davidbrcz, je ne suis pas sûr que cela existe. En effet, l'implementation de cette classe ne garantie pas la disponibilité du FILE* utilisé en interne.

    En cherchant un peu, je suis tombé sur fdstream, qui pourrait peut être t'aider.
    --
    Jérémie
    Jérémie

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    GCC fournie stdio_filebuf.h pour faire ce genre de chose il me semble bien. A confirmer toute fois par quelqu'un qui l'aurait utiliser dans ce sens là.
    "Hardcoded types are to generic code what magic constants are to regular code." --A. Alexandrescu

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par Davidbrcz Voir le message

    Pas bien, tu ne peux pas travailler en full C++ ?
    En fait, non, pour deux raisons :
    - la première c'est qu'il s'agit d'un code déjà conséquent, développé depuis plusieurs années, donc cela me demanderait trop de travail de reprogrammation, et pas passionnant;
    - et la seconde c'est qu'ici C rend très lisibles toutes les fonctions de formatage grâce à fprintf (je sais que c'est "pas bien" Davidbrcz, mais la redondance du typage est un peu plus lisible pour un vérifier un compilo, exceptionnellement ).

  6. #6
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    Citation Envoyé par karimbarkati Voir le message
    En fait, non, pour deux raisons :
    - la première c'est qu'il s'agit d'un code déjà conséquent, développé depuis plusieurs années, donc cela me demanderait trop de travail de reprogrammation, et pas passionnant;
    Haha, la joie du code naze existant
    Sinon, je suis tombé sur cette discussion: et en particulier sur ce message
    Hope it helps !

    Citation Envoyé par karimbarkati Voir le message
    - et la seconde c'est qu'ici C rend très lisibles toutes les fonctions de formatage grâce à fprintf (je sais que c'est "pas bien" Davidbrcz, mais la redondance du typage est un peu plus lisible pour un vérifier un compilo, exceptionnellement ).
    Boost::format powa !
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Citation Envoyé par jfouche Voir le message
    Bonjour

    Si tu manipules des std::ostream, ca me semble compromis, car ce n'est pas (forcement) un fichier. Pour un fichier, il faudrait un std::ofstream. Mais même avec un std::ofstream, comme indiqué par Davidbrcz, je ne suis pas sûr que cela existe. En effet, l'implementation de cette classe ne garantie pas la disponibilité du FILE* utilisé en interne.

    En cherchant un peu, je suis tombé sur fdstream, qui pourrait peut être t'aider.
    --
    Jérémie
    Tu as raison de préciser: je manipule bien des std::ofstream, parfois déclarés comme sous-classes de std::ostream.

    En regardant rapidement, fdstream pourrait apporter une solution, mais l'auteur précise : "The code is provided "as is" without expressed or implied warranty."...

  8. #8
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Points : 4 732
    Points
    4 732
    Par défaut
    mais l'auteur précise : "The code is provided "as is" without expressed or implied warranty."...
    Tout comme g++
    david@debian:~$ g++ --version
    g++ (Debian 4.3.3-14) 4.3.3
    Copyright (C) 2008 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions. There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
    Alors, le mieux est de l'utiliser si ca te convient
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Davidbrcz, je constate que tu es grand fan de boost !

    Boost::format : c'est bien noté !
    Boost::iostreams : effectivement, j'ai trouvé ici ce fichier qui pourrait convenir : file_descriptor.hpp -- Accesses the filesystem using an operating system file descriptor or file handle.

    Donc la suite au prochain épisode...

Discussions similaires

  1. Réponses: 3
    Dernier message: 05/03/2014, 19h53
  2. Conversion d'un File Object en flux binaire
    Par Sebastien_INR59 dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 13/04/2012, 20h56
  3. [Débutant] conversion en m-files
    Par titus2709 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 27/02/2012, 14h57
  4. Conversion contenu objet File en variable String
    Par theleek dans le forum JSF
    Réponses: 2
    Dernier message: 20/12/2007, 11h31
  5. Conversion String en File
    Par Katachana dans le forum Langage
    Réponses: 9
    Dernier message: 11/07/2007, 15h40

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