C++ 将带有参数的程序输出重定向到文件
我经营一家公司 $myprogram.exe 哪个主函数签名是C++ 将带有参数的程序输出重定向到文件,c++,redirect,count,C++,Redirect,Count,我经营一家公司 $myprogram.exe 哪个主函数签名是intmain(intargc,char*argv[]) 程序获取一个参数作为目录路径,并对其中的文件进行一些处理。 在处理过程中,它将一些结果打印到stdout(或stderr)。 我想将这些结果重定向到该文件。因此,我按如下方式运行我的程序: $myprogram.exe C:\dir>res.txt 结果仍打印到屏幕上,res.txt仍为空。 如何解决此问题?您的程序可能会将结果打印到标准错误流(stderr),而不是标准输出流
intmain(intargc,char*argv[])
程序获取一个参数作为目录路径,并对其中的文件进行一些处理。
在处理过程中,它将一些结果打印到stdout(或stderr)。
我想将这些结果重定向到该文件。因此,我按如下方式运行我的程序:
$myprogram.exe C:\dir>res.txt
结果仍打印到屏幕上,res.txt
仍为空。
如何解决此问题?您的程序可能会将结果打印到标准错误流(
stderr
),而不是标准输出流(stdout
)
要重定向stderr(即文件描述符2
),请使用
如果要重定向stdout
和stderr
,应该将它们重定向到不同的文件,如
myprogram.exe C:\dir > res.txt 2> errors.txt
或者将一个流重定向到另一个流,并将后者重定向到文件
myprogram.exe C:\dir >res.txt 2>&1
您的程序可能将结果打印到标准错误流(
stderr
),而不是标准输出流(stdout
)
要重定向stderr(即文件描述符2
),请使用
如果要重定向stdout
和stderr
,应该将它们重定向到不同的文件,如
myprogram.exe C:\dir > res.txt 2> errors.txt
或者将一个流重定向到另一个流,并将后者重定向到文件
myprogram.exe C:\dir >res.txt 2>&1
需要记住的一点是“>”操作符将stdout重定向到输出屏幕,而不是stderr,为了重定向stderr,您还需要写入2>res.txt,因此它应该是1>res.txt 2>res.txt, 我没有尝试,因为重定向到同一个文件,所以可能会出现错误,所以更安全的方法是:
1> res.txt 2>&1需要记住的一点是“>”操作符将stdout重定向到输出屏幕,而不是stderr,为了重定向stderr,您也需要写入2>res.txt,因此它应该是1>res.txt 2>res.txt, 我没有尝试,因为重定向到同一个文件,所以可能会出现错误,所以更安全的方法是:
1 > R.TXT 2>1<P>P。由于这个问题是用C++标记来询问的,这里是怎样将输出重定向到<代码>:ST::CUT和
<>当然,这只适用于输出到标准C++流对象的输出,即它不会重定向到<代码> STDUD> < /COD>或
std::filebuf
的指针,这有点像黑客,但如果必要,可以防止这种情况发生):
< >当然,这只适用于输出到标准C++流对象的输出,即它不会重定向到<代码>输出的STDUD> <代码>或<代码> STDRR .< /P> < P>正确发送参数,如果您想同时发送
您可以在
符号之前使用要重定向的文件描述符的数量。当我们使用2>&1
时,文件描述符2
(stderr
)被重定向到文件描述符ONE
,该描述符使stderr
输出结果显示为stdout
正确发送参数,如果要同时将stdout
和stderr
发送到文件,请使用:
$myprogram.exe“C:\dir”>rest.txt 2>&1
您可以在
符号之前使用要重定向的文件描述符的数量。当我们使用2>&1
时,文件描述符2
(stderr
)被重定向到文件描述符ONE
,它使stderr
输出结果显示为stdout
。表面上看,您的程序似乎写入stderr
,而不是stdout
。至少在Unix上,
符号只重定向stdout
。您在Windows上使用的是哪个shell?cmd.exe
或其他什么?这很重要,因为stderr
的重定向取决于您正在使用的shell。在Bourne/Korn/Bash shell中,您可以使用>res.txt 2>&1
将stdout
和stderr
重定向到同一个文件,或者将>res.txt 2>res.err
用于两个单独的文件表面上看,您的程序似乎是写入stderr
,而不是stdout
。至少在Unix上,
符号只重定向stdout
。您在Windows上使用的是哪个shell?cmd.exe
还是其他什么?这很重要,因为stderr
的重定向取决于您正在使用的hich shell。在Bourne/Korn/Bash shell中,您可以使用>res.txt 2>&1
将stdout
和stderr
都放在同一个文件中,或者将>res.txt 2>res.err
放在两个单独的文件中。@JonathanLeffler,是的。至少在Windows 7上。cmd
并不像人们过去认为的那样愚蠢。@JonathanLeffler,是的。至少在Windows 7上。cmd
并不像人们过去认为的那样愚蠢。好吧,这不会起作用,因为命令处理器会想打开同一个文件,从stdout
和stderr
写入两次,然后失败。是的,你是对的,我没有想到这一点,我只想指出stderr也需要重新编写ected,谢谢你指出错误,我会注意到:)和+1投票支持你的答案。好吧,这不会起作用,因为命令处理器会想打开同一个文件,从stdout
和stderr
写入两次,然后失败。是的,你是对的,我没有想过,我只想指出