相关疑难解决方法(0)

C++:重定向STDOUT

在我的应用程序中,我想将通常转到stdout流的输出重定向到我定义的函数.我读到你可以将stdio重定向到一个文件,为什么不用一个函数呢?

例如:

void MyHandler( const char* data );

//<<Magical redirection code>>

printf( "test" );
std::cout << "test" << std::endl;

//MyHandler should have been called with "test" twice, at this point
Run Code Online (Sandbox Code Playgroud)
  • 我怎样才能实现这种/类似的行为?

c++

48
推荐指数
5
解决办法
5万
查看次数

发送文件写入内存缓冲区(fopen something,但写入缓冲区,而不是磁盘)

我想:

  1. 重定向stdout/stderr
  2. 到内存缓冲区,而不是磁盘
  3. 让stdout/err正常运行

我知道如何使用dup2和freopen:

  • 将stdout/err重定向到我选择的文件
  • 让stdout/err正常运行

......但我不确定第2项?

原因:我想将数据后处理到stdout/err(来自第三方代码),然后将其发送到网络服务器 - 同时让应用程序正常运行.

为什么?...因为现在当我们的应用程序运行时,我们看到关键数据从第三方代码转到stdout(和错误),并且它是一个让用户尝试使用本地日志文件的PITA.我宁愿将"最后N个字节"捕获到环形缓冲区中,对其进行后处理,然后 - 如果用户报告存在问题 - 将其发送到服务器.

为什么要避免文件?...因为这是针对必须在iOS和桌面上运行的代码,并且"不断写入文件"是我想要避免的,因为我不想将它作为文件.另外......我不得不担心维护该文件,主动修剪其大小等.

c ios

5
推荐指数
1
解决办法
3065
查看次数

setbuf重定向

我使用 setbuf 来将 stdout 重定向到 char 缓冲区,但是当我只想将新数据写入 stdout 时,它会产生一些副作用

正如下面的代码所解释的:

#define bufSize  100
int main()
{
    char buf[bufSize];
    setbuf(stdout, buf);
    printf("123");             //123 is written to the buffer

    setbuf(stdout,NULL);       //123 is written to the stdout(unwanted side effect)
    printf("456");             //123456 appears in the stdout
}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

关于此的其他问题 - 这段代码适用于 unix/linux/mac os 吗?

谁能提出重定向的解决方案?

c redirect buffer stdout

2
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×2

buffer ×1

c++ ×1

ios ×1

redirect ×1

stdout ×1