Перенаправление std :: cout при запуске программы в качестве службы

У меня есть программа на C ++, которая печатает на экран, используя std :: cout.

Иногда мне нужно запустить его как сервис. Есть ли способ увидеть выходные данные cout, когда он работает как служба Windows?

Перенаправление вывода в файл или какую-либо программу отладки было бы идеальным вариантом.

Очевидно, я мог бы заменить cout функцией, которая пишет в файл, и это, вероятно, то, что я сделаю, но мне любопытно узнать, есть ли другие решения.

1

Решение

Там в основном бесконечные варианты. Первые несколько, которые приходят на ум:

Обойти ссылку ostream

Вы можете передать ссылку std :: ostream:

void someFunc(std::ostream& out) {
//someFunc doesn't need to know whether out is a file, cout, or whatever
out << "hello world" << std::endl;
}

замещать cout основной буфер с файлом

Пример из cplusplus.com:

streambuf *psbuf, *backup;
ofstream filestr;
filestr.open ("test.txt");

backup = cout.rdbuf();     // back up cout's streambuf

psbuf = filestr.rdbuf();   // get file's streambuf
cout.rdbuf(psbuf);         // assign streambuf to cout

cout << "This is written to the file";

Там есть 1-вкладыш с Freopen, но у меня есть чувство ползучести (и этот кажется, усиливает это в комментариях) что это неопределенное поведение, так как stdin и cout могут быть не синхронизированы.

freopen("/path/to/file", "r", stdout);
//cout is now writing to path/to/file

Библиотека журналов

Не уверен, что у меня все в порядке, но вы можете полностью использовать библиотеку журналов. (Есть также события Windows, хотя в зависимости от того, что вы выводите, это может не иметь смысла.)

кант

Я сомневаюсь, что это возможно с помощью службы Windows, но если это так, всегда есть классическое перенаправление:

blah.exe > C:\path\file
2

Другие решения

Простое решение SetStdHandle(STD_OUTPUT_HANDLE, your_new_handle),

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector