c++ - example - Creando objeto fstream desde un puntero FILE*
ofstream c++ example (2)
La forma bien conocida de crear un objeto fstream
es:
ifstream fobj("myfile.txt");
es decir. utilizando un nombre de archivo.
Pero quiero crear un objeto ifstream usando un descriptor de archivo.
Motivo: quiero ejecutar un comando usando
_popen()
._popen()
devuelve la salida como unFILE*
. Así que hay un puntero FILE * involucrado pero no un nombre de archivo.
No puede hacerlo solo en C ++ estándar, ya que iostreams y CI / O están completamente separados y no están relacionados. Sin embargo, puede escribir su propio iostream que esté respaldado por una secuencia de C FILE. Creo que GCC viene con una clase de transmisión como una extensión de biblioteca.
Alternativamente, si todo lo que quiere es una forma objetiva de envolver un flujo de C FILE, puede usar un puntero único para ese propósito.
Puedes crear una cadena y usar fread para leerla y anexarla. No está limpio, pero estás trabajando con una interfaz C
Algo como esto debería funcionar:
FILE * f = popen(...)
const unsigned N=1024;
string total;
while (true) {
vector<char> buf[N];
size_t read = fread((void *)&buf[0], 1, N, f);
if (read) { total.append(buf.begin(), buf.end()); }
if (read < N) { break; }
}
pclose(f);