C和C++中的標準輸出和標準錯誤輸出
阿新 • • 發佈:2019-02-06
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才有相同的執行效果。