为了账号安全,请及时绑定邮箱和手机立即绑定

从C重路由stdin和stdout

从C重路由stdin和stdout

C
莫回无 2019-07-10 16:36:10
从C重路由stdin和stdout我想重新打开stdin和stdout(也许还有stderr)文件处理,以便将来调用printf()或putchar()或puts()将转到一个文件中,以后将调用getc()这将来自一个文件。1)我不想永久地丢失标准输入/输出/错误。我可能想在以后的程序中重用它们。2)我不想打开新的文件句柄,因为这些文件句柄要么必须大量传递,要么必须是全局的(颤抖)。我不想用任何open()或fork()或者其他依赖于系统的函数,如果我帮不上忙的话。所以基本上,这样做有效吗?stdin = fopen("newin", "r");如果是的话,我如何才能得到stdin背?我要把它储存在FILE *晚点再拿回来?
查看完整描述

3 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

为什么使用freopen()?C89规范在以下部分的尾注中有答案:<stdio.h>:

116.类的主要用途。freopen函数是更改与标准文本流关联的文件(stderrstdin,或stdout),因为这些标识符不需要是可修改的lvalue,因此fopen功能可以分配。

freopen通常被滥用。stdin = freopen("newin", "r", stdin);..这可不是比fclose(stdin); stdin = fopen("newin", "r");..这两个表达式都试图将stdin,这并不保证是可以分配的。

正确的使用方式freopen是省略任务:freopen("newin", "r", stdin);


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 501 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信