写博客就像写作文,是要素材哒~
大家在运行程序的时候,有时候需要让他输出到文件(控制台输出),又不能改程序(别人给你的编译好的程序),就可以利用重定向>符号:
rem aaa.exe是要运行的程序的名称,op.lsktxt是要输出到的文件(本行开头的rem是DOS下的注释):
aaa.exe > op.lsktxt
如果要输出到设备,也可以这样哦!把要输出到的文件名改成设备名就好啦!
那如果不要输出呢?
rem nul是空设备,输出到空设备就相当于没有输出:
aaa.exe > nul
但是如果运行出错(不是崩溃,是用cerr输出),就还是会在控制台上输出:
代码:
#include <iostream>
using namespace std;
int main()
{
printf("printf message");
cerr << "error message" << endl;
return 0;
}
//编译成err_msg_out.exe
控制台代码:
err_msg_out.exe > nul
输出:
error message
如果我们要屏蔽错误消息(和普通输出),有很多人都是这样做的:
xxx.exe > nul 2> nul
却没有说为什么,我也是看了C++ Primer Plus第17章才知道(粗略地提到了):
如果重定向没有起作用,则选定的消息都将被现实在屏幕上。然而,如果程序输出被重定向到一个文件,则第一条消息(如果被选定)将被发送到文件中,而第二条消息(如果被选定)将被发送到屏幕。顺便说一句,有些操作系统也允许对标准错误进行重定向。例如,在UNIX和Linux中,运算符2>重定向标准错误。
书中说的代码是:
if(success)
std::cout << "Here come the goodies!\n";
else
{
std::cerr << "Something horrible has happened.\n";
exit(1);
}
书中说了有UNIX和Linux,其实Windows也可以,并且重定向可以连续使用,这就是为什么xxx.exe > nul 2> nul
会起作用了。
还有,用没有的命令或没有的程序输出的也是错误消息,如:
dir > nul
就没有输出,而
diir > nul
就输出“'diir' 不是内部或外部命令,也不是可运行的程序
或批处理文件。”,但
diir > nul 2> nul
就没有输出了。
注意!!2> nul中'>'和'nul'之间的空格不必要,但是'2'和'>'之间不能有空格!