2017-07-03 13 views
0

誰もがバッファリングせずにstderrをファイルにリダイレクトする方法を知っていますか?可能であれば、Linux(CentOS 6)オペレーティングシステム用のC++言語でシンプルなコードを表示できますか? C++stderrをバッファなしでファイルにリダイレクトする方法はありますか?

#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

です。 – Barmar

+0

SOは無料のコーディングサービスではありません。自分で問題を解決しようとする試みが必要です。あなたがそれを働かせることができない場合は、あなたが試したものを投稿してください。 – Barmar

+0

私はあなたが望むものはコマンドラインで '2> stderr_file.txt'と同じですか? あなたが必要とするのは、C++プログラムをビルドした後にlinuxスクリプトで呼び出すことです。呼び出し後に '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; 
} 

これを行うための別の方法は、以下のdup2()コール `stderr`は、デフォルトではバッファリングされていない

#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

最後にあなたのメッセージをファイルに書きます、そうですか? –

+0

FirdavsbekNarzullaev Yep – Curious

関連する問題