1. 程式人生 > >C和C++中的標準輸出和標準錯誤輸出

C和C++中的標準輸出和標準錯誤輸出



C語言相關

C中的標準輸出和標準錯誤輸出是stdout和stderr兩個"File *"型別的檔案指標。
fprintf(stdout,"stdout: hello world\n");
fprintf(stderr,"stderr: hello world\n");

C++相關

C++中的則是cout和cerr兩個output stream。
cout << "cout: hello world\n";
cerr << "cerr: hello world\n";

重定向

"1>"重定向標準輸出:
#./a.out 1>info
通過上面的方法C語言中的stdout和C++中的cout,被重定向到指定檔案。


"2>"重定向標準錯誤輸出:
#./a.out 2>info_err
通過上面的方法C語言中的stderr和C++中的cerr,被重定向到指定檔案。

"2>&1"讓標準錯誤輸出重定向到標準輸出的位置:

#./a.out 1>info 2>&1

需要特別注意的一點:

cmd1      #./a.out 1> info
cmd2      #./a.out 1 > info
比較上面兩條語句,它們的區別是第二句在"1"和">"之間多了一個空格。開啟各自產生的info檔案,會發現內容是一樣的。這樣很容易誤認為兩句話是完全等價的,其實不然。
cmd1是貨真價實的把stdout重定向到info。cmd2是把"1"作為引數傳遞給了a.out(printf出main函式的argv[1]就知道了)。然後cmd2預設把標準輸出重定向了。 所以cmd1和cmd2才有相同的執行效果。