2017-07-03 34 views
0

有沒有人知道如何將stderr重定向到一個沒有緩衝的文件?如果可能的話,你可以向我展示一個簡單的Linux代碼(Centos 6)的C++語言代碼..?!如何將stderr重定向到沒有任何緩衝區的文件?

+0

'stderr'默認情況下不進行緩衝。 – Barmar

+0

SO不是免費的編碼服務。你必須嘗試自己解決問題。如果無法正常工作,請發佈您嘗試的內容,我們會幫助您解決問題。 – Barmar

+0

我不確定,你想要的和命令行中的'2> stderr_file.txt'是一樣的嗎? 也許你需要在構建它之後通過linux腳本調用你的C++程序,或者甚至在你的調用之後創建和運行你的程序並添加'2>'的腳本。 –

回答

4

在C

#include <stdio.h> 

int 
main(int argc, char* argv[]) { 
    freopen("file.txt", "w", stderr); 

    fprintf(stderr, "output to file\n"); 
    return 0; 
} 

在C++

#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int 
main(int argc, char* argv[]) { 
    ofstream ofs("file.txt"); 
    streambuf* oldrdbuf = cerr.rdbuf(ofs.rdbuf()); 

    cerr << "output to file" << endl; 

    cout.rdbuf(oldrdbuf); 
    return 0; 
} 
0

另一種方式做,這是一個具有以下dup2()呼叫

#include <iostream> 
#include <stdexcept> 
#include <stdio.h> 
#include <unistd.h> 

using std::cerr; 
using std::endl; 

int main() { 
    auto file_ptr = fopen("out.txt", "w"); 
    if (!file_ptr) { 
     throw std::runtime_error{"Unable to open file"}; 
    } 

    dup2(fileno(file_ptr), fileno(stderr)); 
    cerr << "Write to stderr" << endl; 
    fclose(file_ptr); 
} 
+0

最後它會將你的信息寫入文件,對吧? –

+0

FirdavsbekNarzullaev是的 – Curious

相關問題