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

你可能感兴趣的:(c语言打印到标准错误)