write example definicion borland c++ popen ifstream

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 un FILE* . 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);