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才有相同的执行效果。