简体   繁体   English

将stdout和stderr重定向到c ++中的单个文件

[英]Redirecting stdout and stderr to a single file in c++

How to redirect stdout and stderr to a single file in c++? 如何将stdout和stderr重定向到c ++中的单个文件?

what i tried was: 我试过的是:

if((LogStream = freopen(strFilePath.c_str(), "w", stdout)) == NULL)
{
    cout << "Failed to redirect console logs\n";
}
if((LogStream = freopen(strFilePath.c_str(), "a", stderr)) == NULL)
{
    cout << "Failed to redirect console logs\n";
}

But it is not working as i expected. 但它没有像我预期的那样工作。

Thanks in advance 提前致谢

Here's how you can change each of the raw file/C buffered file/C++ buffered streams: 以下是如何更改每个原始文件/ C缓冲文件/ C ++缓冲流:

#include <unistd.h>
#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

int main() {
  // unbuffered system-call level write() access:
  ::fclose(stderr);
  if (::dup2(STDOUT_FILENO, STDERR_FILENO) == -1) {
    cout << "dup2() failed!" << endl;
    return -1;
  }
  char msg_err[] = "write(STDERR_FILENO) OK.\n";
  char msg_out[] = "write(STDOUT_FILENO) still OK.\n";
  write(STDERR_FILENO, msg_err, strlen(msg_err));
  write(STDOUT_FILENO, msg_out, strlen(msg_out));

  // buffered C-style access: (ordering may be weird w/o fflush())
  stderr = ::fdopen(STDOUT_FILENO, "a");
  fprintf(stderr, "fprintf(stderr) OK.\n");
  fprintf(stdout, "fprintf(stdout) still OK.\n");

  // buffered C++ access:
  std::cerr.rdbuf(std::cout.rdbuf());
  cerr << "cerr << OK.\n";
  cout << "cout << still OK.\n";
}

That said, it's still better to do this from the invoking shell. 也就是说,从调用shell执行此操作仍然更好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM