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

Redirecting stdout and stderr to a file in c++

本文关键字:c++ 文件 重定向 stdout stderr      更新时间:2023-10-16

我正在尝试将stdout和stderr重定向到日志文件。

/* Redirecting stderr buffer to stdout */
dup2(fileno(stdout), fileno(stderr));
/* Redirecting stdout buffer to logfile */
    if((LogStream = freopen(LogPath.c_str(), "w", stdout)) == NULL)
    {
            cout << "Failed to redirect console logsn";
    }   
.
.
. //other code
.
.
fclose(LogStream);
LogStream = freopen (NULL_LOG, "w", stdout);

这就是我正在做的。但我还是遗漏了一些日志。当我执行应用程序时,我才知道注释掉了这些代码行。我对这个代码片段持怀疑态度。请对此提供反馈。

首先关闭stdout和stderr

close(STDOUT_FILENO);
close(STDERR_FILENO)

打开要写入日志的新文件。

int file = open( "logfile", O_CREAT | O_RDWR, 0644 );

复制要与stdout和stderr一起使用的日志文件描述符。参见man dup2

dup2( file, STDOUT_FILENO);
dup2( file, STDERR_FILENO);

我希望上面的代码能帮助你。。