Étant donné un flux de mémoire d'entrée C++ std::istream
, est-il possible d'écrire directement des données de ce flux dans un flux de fichier C (FILE*
) sans avoir à écrire des données sur le disque?Flux de mémoire C++ vers le flux de fichier C
La raison pour laquelle je demande est que j'ai une interface C prenant un FILE*
, pour lequel je veux supporter de manière transparente les fichiers d'entrée compressés ou non compressés. L'idée est d'écrire une fonction wrapper qui prend le fichier d'entrée, puis utilise boost::iostreams
pour créer un flux de filtrage qui effectue la décompression si nécessaire, puis transmet les données décompressées à l'API C.
L'approche directe consiste à décompresser un fichier compressé, écrire les données décompressées sur le disque, puis fopen
le fichier temporaire. Je veux cependant éviter de devoir créer des fichiers temporaires.
Une autre option consiste à décompresser toutes les données en mémoire, puis utilisez fmemopen
pour obtenir un FILE*
aux données décompressées. Cela signifie que je pourrais devoir allouer beaucoup de données cependant, je préférerais voir une solution tamponnée. Est-ce que c'est possible?
Jetez un coup d'œil à 'open_memstream' Il pourrait faire ce que vous voulez. –
Si vous voulez des données streamées/mises en mémoire tampon, 'pipe' et' fdopen' pourraient être meilleurs que 'fmemopen'. – Sneftel
Est-ce que [boost :: zlib] (http://www.boost.org/doc/libs/release/libs/iostreams/doc/classes/zlib.html) aide? – jxh