控制台信息如何重定向到文件

相忘于江湖吧 2011-01-21 03:17:31
freopen()可以实现信息的重定向,比如将stderr的重定向到一个文件(此时只能在重定向文件中输出信息,但是在控制台上就没有输出信息了),但是有没有什么方法可以实现信息在stderr和一个重定向文件同时都输出的功能?
...全文
709 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
可乐崽 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 jim_king_2000 的回复:]

用tee。

test.exe | tee xxx.txt
[/Quote]
+1
maintian 2011-01-22
  • 打赏
  • 举报
回复
我原先用过dup2,将标准输出流重定向到tty。应当可以!
相忘于江湖吧 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 joanlynnlove 的回复:]
引用 5 楼 chenj_freedom 的回复:

引用 1 楼 joanlynnlove 的回复:
stderr > E:\a.txt
type E:\a.txt

管道功能我是了解的,想问的是在自己写的源代码中要如何实现该功能? 而并不是编译出exe了,然后在控制台敲命令(test.exe 1>test.log 2>&1)的方式?

比如在源码中添加freop……
[/Quote]

按你说的这个方法虽然是可以实现,但是这个方法似乎并不是最好的,要先放到一个临时文件中,再将临时文件的内容输出到最后的“重定向文件”和“控制台(stderr)”,还需要使用到像system();这样的函数,时间上可能花费是比较大的。

不知道还有没有其他方法呢? 将stderr重定位,一个是定位到本身,一个定位到文件中去?
相忘于江湖吧 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 maintian 的回复:]
试一下这个函数,dup2,文件重定向!!
[/Quote]


int _dup2(
int fd1,
int fd2
);


这个好像是和open(),read()等结合的,而不是和fopen(),fread();结合。
前者是系统I/O,后者是标准C库函数,
dup2();似乎不是很好用。。。
maintian 2011-01-21
  • 打赏
  • 举报
回复
试一下这个函数,dup2,文件重定向!!
Jim_King_2000 2011-01-21
  • 打赏
  • 举报
回复
自己写程序就输出两遍。
Jim_King_2000 2011-01-21
  • 打赏
  • 举报
回复
用tee。

test.exe | tee xxx.txt
acdbxzyw 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 chenj_freedom 的回复:]

引用 1 楼 joanlynnlove 的回复:
stderr > E:\a.txt
type E:\a.txt

管道功能我是了解的,想问的是在自己写的源代码中要如何实现该功能? 而并不是编译出exe了,然后在控制台敲命令(test.exe 1>test.log 2>&1)的方式?

比如在源码中添加freopen的话,可以实现在文件中输出,但是同时控制台上的输出就没有了,……
[/Quote]
????
在代码中使用以上命令就行了。不用自己去CMD输入了。。。
先输出到文件,再从文件读出到控制台中,这样也没问题吧。
要想同时,先到buffer再同时往文件和控制台输出呢?
相忘于江湖吧 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 joanlynnlove 的回复:]
stderr > E:\a.txt
type E:\a.txt
[/Quote]
管道功能我是了解的,想问的是在自己写的源代码中要如何实现该功能? 而并不是编译出exe了,然后在控制台敲命令(test.exe 1>test.log 2>&1)的方式?

比如在源码中添加freopen的话,可以实现在文件中输出,但是同时控制台上的输出就没有了,有没有办法可以实现在文件中输出,同时在控制台上也输出??
相忘于江湖吧 2011-01-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 chenj_freedom 的回复:]
freopen()可以实现信息的重定向,比如将stderr的重定向到一个文件(此时只能在重定向文件中输出信息,但是在控制台上就没有输出信息了),但是有没有什么方法可以实现信息在stderr和一个重定向文件同时都输出的功能?
[/Quote]

管道功能我是了解的,想问的是在自己写的源代码中要如何实现该功能? 而并不是编译出exe了,然后在控制台敲命令(test.exe 1>test.log 2>&1)的方式?

比如在源码中添加freopen的话,可以实现在文件中输出,但是同时控制台上的输出就没有了,有没有办法可以实现在文件中输出,同时在控制台上也输出??
bluesky12312388 2011-01-21
  • 打赏
  • 举报
回复
google 管道
acdbxzyw 2011-01-21
  • 打赏
  • 举报
回复
stderr 2> E:\a.txt
type E:\a.txt
acdbxzyw 2011-01-21
  • 打赏
  • 举报
回复
stderr > E:\a.txt
type E:\a.txt

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧