Maison > développement back-end > C++ > Comment créer un flux C à partir d'un descripteur de fichier POSIX ?

Comment créer un flux C à partir d'un descripteur de fichier POSIX ?

DDD
Libérer: 2024-12-20 17:45:14
original
472 Les gens l'ont consulté

How to Create a C   fstream from a POSIX File Descriptor?

Comment construire un fstream C à partir d'un descripteur de fichier POSIX ?

La création d'un fstream C à partir d'un descripteur de fichier POSIX nécessite une réflexion. Bien que cela puisse paraître simple, la mise en œuvre peut être complexe.

Approche standard C

La bibliothèque C standard ne fournit pas de méthode directe pour créer un fstream à partir d'un descripteur de fichier. Cependant, certaines implémentations, telles que libstdc , peuvent proposer un constructeur d'extension non standard qui accepte un descripteur de fichier ou un pointeur FILE* en entrée.

Solution Libstdc

Libstdc fournit le __gnu_cxx :: Modèle de classe stdio_filebuf, qui hérite de std::basic_streambuf et possède un constructeur qui associe un flux tampon avec un descripteur de fichier POSIX :

stdio_filebuf (int __fd, std::ios_base::openmode __mode, size_t __size=static_cast< size_t >(BUFSIZ))
Copier après la connexion

Un exemple utilisant ce constructeur :

#include <ext/stdio_filebuf.h> // Libstdc++ extension
#include <iostream>

int main() {
    ...

    int posix_handle = ...;

    __gnu_cxx::stdio_filebuf<char> filebuf(posix_handle, std::ios::in);
    istream is(&filebuf);

    ...
Copier après la connexion

Solution Microsoft Visual C

Microsoft Visual C propose également un tampon non standard Constructeur ifstream qui accepte un pointeur FILE* :

explicit basic_ifstream(_Filet *_File);
Copier après la connexion

Vous pouvez utiliser ce constructeur avec _fdopen pour créer un ifstream à partir d'un descripteur de fichier :

#include <cstdio>
#include <iostream>

int main() {
    ...

    int posix_handle = ...;

    FILE* c_stream = _fdopen(posix_handle, "r");
    ifstream ifs(c_stream);

    ...
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal