C++ popen()
возвращает дескриптор файла, содержащий результат после выполнения процесса. Вместо FILE * мне нужен символ char *, т.е. строка будет моим выходом. Что я делаю? Пожалуйста, помогите мне.Вывод C++ popen() в строку
ответ
Я предполагаю, что я хотел бы сделать что-то на этом общем порядке:
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);
}
Если вы хотите получить более сложные, вы могли бы выделить пространство динамично, и попытаться увеличить его по мере необходимости удерживать объем выпуска Вы получаете. Это будет лучший маршрут, если у вас есть хотя бы некоторое представление о том, сколько продукции может произвести ребенок.
Edit: Учитывая, что вы используете C++, результат с динамическим размером на самом деле довольно легко:
char line[line_size];
std::string result;
while (fgets(line, line_size, your_pipe))
result += line;
Почему бы не использовать 'std :: string' для окончательного результата и использовать' append'? –
@KerrekSB: В основном потому, что я как-то думал, что он был помечен как C, а не C++. –
Прочитайте вывод из FILE*
в строку, используя обычные процедуры stdio
.
Спасибо, что ответили. Не могли бы вы предоставить пример кода ... !!! ??? –
См https://stackoverflow.com/a/10702464/981959
Вы можете сделать это в две строки (три включая ЬурейеЕ к улучшить читаемость):
#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());
}
Это относится ко всему распределению памяти и закрытию потока снова, когда вы закончите с ним.
- 1. преобразовать вывод Popen в массив
- 2. Предотвратить POPEN показывать вывод комманд
- 3. Отправить вывод popen через websockets
- 4. Получение странный вывод из Popen
- 5. Захватив tshark стандартный вывод с POPEN в C
- 6. popen performance in C
- 7. C# Directory.GetDirectories Вывод в строку
- 8. вывод списка файлов из popen в ifstream.open
- 9. popen-эквивалент в C++
- 10. Вызов множественного popen в c/C++
- 11. C++ popen() параметр
- 12. popen()/fgets() прерывает вывод неполного вывода
- 13. Как проложить строку в команду popen() в C?
- 14. Получить вывод команды Python с помощью Popen
- 15. python - как подключить вывод, используя popen?
- 16. Python подпроцесс/Popen стандартный вывод усекается
- 17. Вывод данных в строку
- 18. неуместное использование popen() в C?
- 19. Объектив c popen
- 20. Вывести вывод SqlCeDataReader в строку (C#)
- 21. C# Как установить вывод этого в строку?
- 22. C++ странный вывод, преобразующий строку в int
- 23. Popen communication vs Popen stdin.write()
- 24. Консольный вывод в строку
- 25. Вывод _CrtDumpMemoryLeaks() в строку
- 26. Выполните команду и получите вывод: popen и pclose undefined
- 27. popen vs системный вызов C++
- 28. Использование popen в трубах в c
- 29. Bash - вывод идентифицирует вывод в новую строку
- 30. Преобразование ReadProcessMemory вывод в строку
Посмотрите на эту тему: http://stackoverflow.com/questions/478898/how-to-execute-a-command-and-get-output-of-command-within-c Удачи! – DCMaxxx