C++ popen()
devuelve un descriptor de archivo que contiene la salida, después de ejecutar un proceso. En lugar de un ARCHIVO *, necesito un char *, es decir. una cuerda para ser mi salida. ¿Qué debo hacer? Por favor, ayúdame.C++ popen() 'salida a una cadena
Respuesta
supongo que me gustaría hacer algo en este orden general:
char big_buffer[BIG_SIZE];
char small_buffer[LINE_SIZE];
unsigned used = 0;
big_buffer[0] = '\0'; // initialize the big buffer to an empty string
// read a line data from the child program
while (fgets(small_buffer, LINE_SIZE, your_pipe)) {
// check that it'll fit:
size_t len = strlen(small_buffer);
if (used + len >= BIG_SIZE)
break;
// and add it to the big buffer if it fits
strcat(big_buffer, small_buffer);
used += strlen(small_buffer);
}
Si desea obtener más elaborada, que se pudo asignar espacio de forma dinámica, y tratar de aumentarlo si es necesario para mantener la cantidad de producción usted obtiene. Esa sería una mejor ruta a menos que tenga al menos alguna idea de la cantidad de producción que el niño podría producir.
Editar: Teniendo en cuenta que usted está usando C++, un resultado con el tamaño dinámico es realmente muy fácil:
char line[line_size];
std::string result;
while (fgets(line, line_size, your_pipe))
result += line;
¿Por qué no utilizar 'std :: string' para el resultado final y usar' append'? –
@KerrekSB: Principalmente porque de alguna manera pensé que estaba etiquetado como C en lugar de C++. –
Lea la salida del FILE*
en una cadena utilizando las rutinas habituales stdio
.
Gracias por responder. ¿Podría por favor proporcionar un código de muestra ... !!! ??? –
Ver https://stackoverflow.com/a/10702464/981959
Puede hacerlo en dos líneas (tres incluyendo un typedef a mejorar la legibilidad):
#include <pstream.h>
#include <string>
#include <iterator>
int main()
{
redi::ipstream proc("./some_command");
typedef std::istreambuf_iterator<char> iter;
std::string output(iter(proc.rdbuf()), iter());
}
Esto se encarga de todas las asignaciones de memoria y de cerrar la secuencia de nuevo cuando haya terminado con la misma.
- 1. Alternativas a popen/pclose?
- 2. python: ¿cómo canalizar la salida usando popen?
- 3. popen equivalente en C++
- 4. C libcurl obtener salida en una cadena
- 5. c popen no detectará stderr
- 6. Does powershell tiene un equivalente a popen?
- 7. Lectura de resultados popen en C++
- 8. encadenamiento subprocesos Popen adecuadamente
- 9. matar a un proceso iniciado con popen
- 10. Cómo dar salida a una cadena con comillas dobles?
- 11. salida de redirección .NET StreamWriter a una variable de cadena
- 12. Limpieza de Popen de Python
- 13. Tubería popen stderr y stdout
- 14. Java: popen() - función similar?
- 15. Serializar/Deserializar a una cadena C#
- 16. conversión de bytes a una cadena C#
- 17. Enviando una cadena de R a C++
- 18. tubo de Linux: Captura de la salida en tiempo real a través de la mesa de ping popen
- 19. ¿Procesos de muerte abiertos con popen()?
- 20. Cómo dar salida a la cadena Unicode a RTF (usando C#)
- 21. ¿Puede popen() hacer tubos bidireccionales como pipe() + fork()?
- 22. Cómo utilizar subproceso popen Python
- 23. Cómo canalizar la salida de Invoke-Expression a la cadena?
- 24. python subprocess Popen environment PATH?
- 25. Obtener salida de símbolo del sistema a cadena en Java
- 26. Lectura/escritura en un subproceso Popen()
- 27. convirtiendo cadena de estilo c a cadena de estilo C++
- 28. una cadena en C
- 29. Llamar a una función de una cadena en C#
- 30. Cifrado de una cadena a una URL en C#
Tenga una mirada a este tema: http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c ¡Buena suerte! – DCMaxxx