正在将stdout重定向到文件
Redirecting stdout to file
可能重复:
如何将cin和cout重定向到文件?
我正在调试一些意大利面条代码,这些代码通过std::cout和名为tecla:的第三方库写入终端
http://www.astro.caltech.edu/~mcs/tecla/
我想把自己挂接到stdout,这样我就可以把它重定向到一个文件。在保存到文件之前,我可以将字符串转换为十六进制表示,这样我就可以更容易地识别它们包含的所有控制字符。
我还可以将程序中的各种事件记录到该文件中,以便更好地了解程序的工作方式。
关于我该怎么做,有什么建议吗?
更新
我的程序还通过std输入在终端上接收命令。它似乎在做:
myprogram 9889>output.txt
甚至
myprogram 9889|xxd
以某种方式扰乱程序,以至于我似乎无法让程序响应输入的命令。
提示(>(不会出现在output.txt中。
如果您在UNIX oid系统上,除了直接存储到文件中(如其他答案所示(,您还可以以HEX编码查看它,并通过组合hexdump
和less
:使用光标键浏览它
./myProgram | hexdump -C | less
然后输出看起来像:
00000000 73 6f 6d 65 20 63 72 79 70 74 69 63 20 6f 75 74 |some cryptic out|
00000010 70 75 74 20 66 72 6f 6d 20 6d 79 20 70 72 6f 63 |put from my proc|
00000020 65 73 73 0a |ess.|
00000024
要同时查看(浏览使用较少(+保存文件,只需在以下命令管道中添加一个tee
命令:
./myProgram | hexdump -C | tee output.txt | less #for hex-encoded file content
./myProgram | tee output.txt | hexdump -C | less #for 1:1 file content
要将stderr
输出也包含在文件/视图中,请在处理前将两个通道合并,方法是在处理命令行前使用2>&1
:
./myProgram 2>&1 | ...
写入std::cout
是非常糟糕的做法,除了小测试程序。但既然你被它卡住了,在代码中无法更改:可以将streambuf
更改为流写入,内容如下:
class WrappedOutputFilebuf : public std::filebuf
{
std::ostream& mySavedStream;
std::streambuf* mySavedStreambuf;
public:
WrappedOutputFilebuf( std::ostream& stream, std::string filename )
: mySavedStream( stream)
, mySavedStreambuf( stream.rdbuf() )
{
open( filename.c_str(), std::ios_base::out );
if ( ! is_open() ) {
throw some_error;
}
stream.rdbuf( this );
}
~WrappedOutputFilebuf()
{
mySavedStream.rdbuf( mySavedStreambuf );
}
};
然后在某个地方申报:
WrappedOutputFilebuf w( std::cout, fileName );
只要变量在范围内,std::cout
就会输出到您指定的文件。
将输出重定向到文件通常是在命令行上执行的,而不是在代码本身中执行。例如:
myProgram > output.txt
只需键入即可运行程序
myprogram > output.txt
然后使用十六进制编辑器(如WinHex或ghex2(查看output.txt文件。
如果您正在调试的程序对它是否与终端通信很敏感,那么您可以查看screen
,特别是它的日志记录功能。
- 获取通过重定向传入的输入文件的名称?
- 写入文件 a.txt,而终端重定向到文件 b.txt
- 将 clangd stderr 重定向到文件而不是控制台
- 可以将Boost消息队列文件重定向到用户指定的位置
- 如何使用PHP将上传到本地主机的一个html文件重定向到磁盘上的另一个html文档
- 即使可执行文件的输入是从文件重定向的,如何强制从终端输入?
- makefile:不同目录中的CPP文件,将对象文件重定向为./obj,并且可执行到./bin
- 仅允许一个文件重定向到stdin
- 使用 ubuntu Linux 的 c++ 文件重定向和编码问题
- gdb:如何将共享库的日志文件重定向到 gdb 输出
- Getline 在将文件重定向到标准输入时会导致无限循环
- 为什么尝试的文件重定向会破坏此代码
- 文件重定向运算符">"不适用于创建进程() API
- C++ 无法让 cin 从文件重定向中读取结束行字符
- 输入/输出从命令行可执行文件重定向到文件
- C++文件重定向
- Windows:C++:从文件重定向到串行端口(输入)
- 数独解算器文件重定向
- NSight:命令行参数中的文件重定向
- 如何检测输入正在从文件重定向