猿问

从C重路由stdin和stdout

从C重路由stdin和stdout

我想重新打开stdinstdout(也许还有stderr)文件处理,以便将来调用printf()putchar()puts()将转到一个文件中,以后将调用getc()这将来自一个文件。

1)我不想永久地丢失标准输入/输出/错误。我可能想在以后的程序中重用它们。

2)我不想打开新的文件句柄,因为这些文件句柄要么必须大量传递,要么必须是全局的(颤抖)。

我不想用任何open()fork()或者其他依赖于系统的函数,如果我帮不上忙的话。

所以基本上,这样做有效吗?

stdin = fopen("newin", "r");

如果是的话,我如何才能得到stdin背?我要把它储存在FILE *晚点再拿回来?


莫回无
浏览 502回答 3
3回答

精慕HU

为什么使用freopen()?C89规范在以下部分的尾注中有答案:<stdio.h>:116.类的主要用途。freopen函数是更改与标准文本流关联的文件(stderr,&nbsp;stdin,或stdout),因为这些标识符不需要是可修改的lvalue,因此fopen功能可以分配。freopen通常被滥用。stdin = freopen("newin", "r", stdin);..这可不是比fclose(stdin); stdin = fopen("newin", "r");..这两个表达式都试图将stdin,这并不保证是可以分配的。正确的使用方式freopen是省略任务:freopen("newin", "r", stdin);
随时随地看视频慕课网APP
我要回答