gpt4 book ai didi

c++ - 当程序作为服务运行时重定向 std::cout

转载 作者:可可西里 更新时间:2023-11-01 11:35:05 27 4
gpt4 key购买 nike

我有一个使用 std::cout 打印到屏幕的 C++ 程序。

有时我需要将其作为服务运行。当它作为 Windows 服务运行时,有什么方法可以查看 cout 输出吗?

将输出重定向到文件或某种调试程序将是理想的。

显然,我可以用写入文件的函数替换 cout,这可能是我要做的,但我很想知道是否还有其他解决方案。

最佳答案

基本上有无限的选择。首先想到的是:

传递 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";

freopen 有一个 1-liner,但我有一种毛骨悚然的感觉(this 似乎在评论中强化了它)它是未定义的行为,因为 stdin 和 cout 可以不同步。

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

一个日志库

不确定我的头顶是什么好东西,但是您可以全力以赴并使用某种类型的日志记录库。 (还有 Windows 事件,但根据您输出的内容,这可能没有意义。)

管道

我怀疑这对于 Windows 服务是否可行,但如果可行,则始终存在经典重定向:

blah.exe > C:\path\file

关于c++ - 当程序作为服务运行时重定向 std::cout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13394298/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com