Anlegen fstream sind Objekt aus einer DATEI* Zeiger
Den bekannten Verfahren zur Erstellung eines fstream
Objekt:
ifstream fobj("myfile.txt");
ie. mit einem Dateinamen.
Aber ich will ein ifstream-Objekt mit einem Datei-Deskriptor.
Grund: ich möchte einen Befehl auszuführen
_popen()
._popen()
gibt die Ausgabe alsFILE*
. Also es gibt einen FILE* - Zeiger beteiligt, aber keine mit dem Namen.
- Posix-file-Deskriptoren sind noch eine andere Sache. Vermutlich C++ - iostreams-und C-I/O-umgesetzt werden, im Hinblick auf eine Posix-Plattform. Die vorliegende Frage ist vernünftig, aber, da beide iostreams und C-I/O sind Teil der standard-Bibliothek.
- dies ist ein Duplikat von stackoverflow.com/questions/2746168/... gegeben, die Sie verwenden können
fileno
auf dieFILE*
zurück vonpopen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht nur in standard-C++, da die iostreams und C-I/O sind völlig getrennt und unabhängig. Man könnte aber schreiben Sie Ihre eigenen iostream das ist gesichert durch eine C-DATEI-stream. Ich glaube, dass GCC kommt mit einer solchen stream-Klasse als library-Erweiterung.
Alternativ, wenn alles, was Sie wollen, ist ein Objekt-y Art der Verpackung C-DATEI-stream, Sie könnte verwenden Sie einen eindeutigen Zeiger für diesen Zweck.
std::fread
wie üblich; die Verwendung eines Zwischenspeichers und fügen Sie die bytes, die Sie Lesen, um Ihre Ergebnis-string. Oder schaue in die GCC-Erweiterungen.Können Sie eine Zeichenfolge erstellen, und verwenden Sie fread Lesen und anfügen", um es. Es ist nicht sauber, aber Sie arbeiten mit einer C-Schnittstelle.
Etwas wie dies funktionieren sollte: