Maison >développement back-end >C++ >Comment créer un flux 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.
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.
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))
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); ...
Microsoft Visual C propose également un tampon non standard Constructeur ifstream qui accepte un pointeur FILE* :
explicit basic_ifstream(_Filet *_File);
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); ...
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!