У меня есть код, написанный на C, который я работаю над созданием библиотеки, из которой я могу обращаться к функциям с других языков.Использование стандартного вывода из библиотеки C в приложении C++
В настоящее время я пишу клиент C++ для этого кода, чтобы выяснить, какие изменения необходимы для обеспечения поддержки включения моей библиотеки в приложение на C++.
Как правило, двоичный код на основе C анализирует некоторый ввод, а затем выводит свои данные на stdout
через ряд операторов fprintf
.
Есть ли способ перенаправлять выходные данные из соответствующих функций C, отправленных на stdout
?
Я не эксперт на C++, но я думаю, что я хотел бы предоставить подкласс буфера вывода потока C++ (ostream
и ofstream
?), Который содержит тот же результат, который в противном случае был бы отправлен соответствующим C функции: stdout
.
Я хотел бы, если это возможно, перенаправить эти данные в поток файлов или на стандартный вывод в приложении C++.
Как я могу это сделать? Могу ли я оставить свой C-код как есть и перенаправить stdout
из кода C++?
EDIT
Я могу редактировать функции C в вопросе, так что указатель файла или дескриптор является аргументом. Помогло бы, сможет ли он пройти туда, где идет выход? Для меня непонятно, как я перевел C++ IO и C IO. Я не могу передать в C++ iostream
функции C, или я могу?
В некоторых системах (особенно Linux) 'stdout' из C и' std :: cout' из C++ синхронизируются. И вы всегда можете использовать заголовок '' в коде на C++, чтобы получить понятие C 'stdout'. –
Итак, если я устанавливаю 'FILE * fp = stdout' и имею функцию C' foo (FILE * fp) ', которая выплевывает данные в' stdout', то что бы я сделал, чтобы перенаправить вывод из 'std :: cout' в выходной поток, который либо (по-прежнему) 'std :: cout', либо поток вывода файла? –
Функция C не знает о C++ 'std :: cout'! Но см. Http://gcc.gnu.org/onlinedocs/gcc-4.6.2/libstdc++/manual/manual/io_and_c.html –