Я хочу выполнить некоторую функцию C в C++. Функция принимает FILE * в качестве аргумента:Перенаправить FILE * stdout в строку в C++
void getInfo(FILE* buff, int secondArgument);
Вы можете сделать это, чтобы печатать на стандартный вывод:
getInfo(stdout, 1);
// the function prints results into stdout, results for each value secondArgument
Но как сделать эту функцию для печати на поток или stringstream в C++, обрабатывать результаты? Я хочу захватить то, что функция печатает, в строку и выполнить некоторую обработку в полученной строке.
я попробовать что-то вроде этого:
for (i=0; i<1000; i++) {
getInfo(stdout, i);
// but dont want print to stdout. I want capture for each i, the ouput to some string
// or array of strings for each i.
}
Вы можете ассоциировать файл '*' к трубе, либо путем создания трубы специальный файл (на Windows, это называется именованным каналом) и использует его путь с 'fopen' или через преобразование fd-to -FILE *', специфичное для ОС. Затем прочитайте с выходного конца трубы в свою строку. В Linux у вас также есть возможность создать временный файл на жестком диске tmpfs, который является «файловой системой», но работает со скоростью ОЗУ без касания диска. –
Но как? Любой пример Linux? – user3654650
Какой вариант вы интересуете? Именованная труба? Анонимная труба? Или файл tmpfs? –