Эксперт С++
1933 / 1045 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
1

как записывать данные в поток ввода-вывода?

17.08.2012, 09:39. Показов 1715. Ответов 4
Метки нет (Все метки)

доброго времени суток, появилась "гениальная" идея, перехватить сообщения идущие в поток ввода-вывода и логировать их. Собственно перехватить - не проблема, qInstallMsgHandler в помощь, а вот как после этого эти сообщения направить обратно в поток ввода-вывода?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.08.2012, 09:39
Ответы с готовыми решениями:

Как можно сделать виртуальный поток ввода / вывода?
есть программа, которая считает кол-во слов в строке причудливым способом, конечно можно сделать...

Как сделать отступы или , чтобы входной поток(ввода) отдельно от вывода
#include <iostream> #define MAX_N 100 using namespace std; class Stack { int st_size=0;...

Как перехватить поток ввода-вывода одной программы через другую (межпроцессорного обмена данными)?
Ребята, извиняюсь за некорректность возможную, поскольку я совсем-совсем новичок. у меня есть ...

Поток ввода-вывода
#include <iostream> using namespace std; int main() { int i; while(true) { ...

4
Почетный модератор
11234 / 4188 / 419
Регистрация: 12.06.2008
Сообщений: 12,079
17.08.2012, 11:09 2
А если так:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void myOutput(QtMsgType type, const char *msg)
{
    QFile f("log.log");
    if (f.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text))
    {
        f.write(msg);
        f.write("\n");
        f.close();
    }
}
 
int main(int argc, char *argv[])
{
    qInstallMsgHandler(myOutput);
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("utf-8"));
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
    MainWindow w;
    w.show();
 
    return a.exec();
}
При этом, когда где-нибудь выполняю
C++ (Qt)
1
2
    qDebug() << "Hello" << "World";
    qDebug() << "Bye";
То создаётся файл log.log с содержимым
Код
Hello World 
Bye
1
Эксперт С++
1933 / 1045 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
17.08.2012, 12:07  [ТС] 3
ну то понятно я же говорю, сделать вывод данных в лог файл, это не проблема, а я ещё хочу, что бы сообщения все так же выводились в и в консоль и в лог файл
0
Почетный модератор
11234 / 4188 / 419
Регистрация: 12.06.2008
Сообщений: 12,079
17.08.2012, 14:18 4
Получилось, когда внутрь этой функции добавил
C++ (Qt)
1
2
    fprintf(stderr, "%s\n", msg);
    fflush(stderr);
по примеру из документации. Только в доках они fflush() не делали, но у меня без него до закрытия приложения ничего не выводилось.
0
Эксперт С++
1933 / 1045 / 109
Регистрация: 29.03.2010
Сообщений: 3,167
17.08.2012, 14:34  [ТС] 5
а fpringf и fflush это кроссплатформенные рюшечки?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.08.2012, 14:34

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Форматирование поток ввода\вывода
Здравствуйте, прощу объяснить и помочь дописать небольшой кусочек программы. 3адание:...

Стандартный поток ввода и вывода в Objective-C
Я новичок в Objective-C. Мне необходимо ввести данные с клавиатуры в переменные а и b, а затем...

Как вывести данные в поле ввода.вывода на экране?
Вопрос конечно тривиальный, но как вывести данные в поле ввода.вывода на экране. Т.е. на форме...

Что из себя представляет допустим поток ввода/вывода
Поясните пожалуйста что из себя представляет допустим поток ввода/вывода в С++ ? Это участок памяти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.