首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堵塞的意义是什么?

堵塞的意义是什么?
EN

Stack Overflow用户
提问于 2008-09-09 17:08:47
回答 6查看 33K关注 0票数 64

我一直在想,堵塞有什么意义?据我所知,阻塞与cerr相同,但具有缓冲功能,因此效率更高。通常stderr与stdout相同,所以阻塞与cout相同。这在我看来是很差劲的,所以我想我一定是误会了。如果我将日志消息发送到与我发出的错误消息相同的位置(可能是在/var/ log / messages中),那么我可能不会写太多(所以使用非缓冲的cerr不会丢失太多)。根据我的经验,我希望我的日志消息是最新的(而不是缓冲的),这样我就可以帮助查找崩溃(所以我不想使用缓冲阻塞)。显然我应该一直使用cerr。

我想在我的程序中重定向阻塞。重定向cerr将非常有用,这样当我调用库例程时,我可以控制cerr和clog的位置。有些编译器能支持这一点吗?我刚刚检查了DJGPP,stdout被定义为文件结构的地址,所以执行诸如"stdout =freopen(.)“之类的操作是非法的。

  • 是否可以重定向阻塞、cerr、cout、stdin、stdout和/或stderr?
  • 阻塞和缓冲之间唯一的区别是?
  • 我应该如何实现(或找到)一个更健壮的日志记录工具(请链接)?
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2008-09-09 17:13:03

是否可以重定向阻塞、cerr、cout、stdin、stdout和/或stderr?

是。您需要rdbuf函数。

代码语言:javascript
复制
ofstream ofs("logfile");
cout.rdbuf(ofs.rdbuf());
cout << "Goes to file." << endl;

阻塞和缓冲之间唯一的区别是?

据我所知是的。

票数 43
EN

Stack Overflow用户

发布于 2008-09-09 17:16:52

如果您是在posix shell环境中(我真的在考虑bash),您可以将任何文件描述符重定向到任何其他文件描述符,因此要重定向,只需:

代码语言:javascript
复制
$ myprogram 2>&5 

将stderr重定向到由fd=5表示的文件。

编辑:再想一想,我更喜欢康拉德·鲁道夫关于重定向的回答。rdbuf()是一种更加连贯和可移植的方法。

至于日志记录,嗯.我从std库中没有的所有东西的Boost库开始。看:Boost测井v2

编辑:Boost日志记录不是Boost库的一部分;它已经过审查,但没有被接受。

编辑:2年后,早在2010年5月,Boost就接受了一个日志库,现在名为Boost.Log

当然,也有其他选择:

  • Log4Cpp (用于C++的log4j风格的API )
  • Log4Cxx (Apache赞助的log4j风格API)
  • 万斯奥斯 (停用?上一次尝试时,我无法让它建立在最近的编译器之上)
  • 谷歌的GLog (帽子顶端@SuperElectric)

还有Windows事件记录器。

还有一些可能有用的物品:

  • 在C++中登录(多布斯博士)
  • 简化日志记录和跟踪(Sun)
票数 15
EN

Stack Overflow用户

发布于 2019-05-25 20:00:44

由于这里有几个关于重定向的答案,我将添加最近偶然发现的关于重定向的这个漂亮的宝石

代码语言:javascript
复制
#include <fstream>
#include <iostream>

class redirecter
{
public:
    redirecter(std::ostream & dst, std::ostream & src)
        : src(src), sbuf(src.rdbuf(dst.rdbuf())) {}
    ~redirecter() { src.rdbuf(sbuf); }
private:
    std::ostream & src;
    std::streambuf * const sbuf;
};

void hello_world()
{
    std::cout << "Hello, world!\n";
}

int main()
{
    std::ofstream log("hello-world.log");
    redirecter redirect(log, std::cout);
    hello_world();
    return 0;
}

它基本上是一个重定向类,允许您重定向任意两个流,并在完成后恢复它。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档