Das Erstellen eines C-fstream aus einem POSIX-Dateideskriptor erfordert Überlegungen. Obwohl es einfach erscheinen mag, kann die Implementierung kompliziert sein.
Die Standard-C-Bibliothek bietet keine direkte Methode zum Erstellen eines Fstreams aus einem Dateideskriptor. Einige Implementierungen, wie z. B. libstdc , bieten jedoch möglicherweise einen nicht standardmäßigen Erweiterungskonstruktor an, der einen Dateideskriptor oder einen FILE*-Zeiger als Eingabe akzeptiert.
Libstdc stellt __gnu_cxx bereit: stdio_filebuf-Klassenvorlage, die von std::basic_streambuf erbt und über einen Konstruktor verfügt, der a zuordnet Stream-Puffer mit einem POSIX-Dateideskriptor:
stdio_filebuf (int __fd, std::ios_base::openmode __mode, size_t __size=static_cast< size_t >(BUFSIZ))
Ein Beispiel für die Verwendung dieses Konstruktors:
#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 bietet auch eine nicht- Standard-IFStream-Konstruktor, der einen FILE*-Zeiger akzeptiert:
explicit basic_ifstream(_Filet *_File);
Sie können diesen Konstruktor zusammen mit verwenden _fdopen, um einen Ifstream aus einem Dateideskriptor zu erstellen:
#include <cstdio> #include <iostream> int main() { ... int posix_handle = ...; FILE* c_stream = _fdopen(posix_handle, "r"); ifstream ifs(c_stream); ...
Das obige ist der detaillierte Inhalt vonWie erstelle ich einen C-Fstream aus einem POSIX-Dateideskriptor?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!