gpt4 book ai didi

c - 从 C 重新路由 stdin 和 stdout

转载 作者:行者123 更新时间:2023-11-30 16:13:17 25 4
gpt4 key购买 nike

我想重新打开 stdinstdout (也许还有 stderr)文件句柄,以便将来调用printf()putchar()puts() 将转到文件,并且将来调用 getc() 等将来自文件。

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

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

3) 如果我无法控制,我不想使用任何 open()fork() 或其他依赖于系统的函数。

所以基本上,这样做是否有效:

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

如果是这样,我怎样才能取回 stdin 的原始值?我是否必须将其存储在 FILE * 中并稍后再取回?

最佳答案

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

116. The primary use of the freopen function is to change the file associated with a standard text stream (stderr, stdin, or stdout), as those identifiers need not be modifiable lvalues to which the value returned by the fopen function may be assigned.

freopen经常被滥用,例如stdin = freopen("newin", "r", stdin); 。这并不比 fclose(stdin); stdin = fopen("newin", "r"); 更便携。 。两个表达式都尝试分配给 stdin ,不保证可分配。

正确的使用方法freopen是省略赋值:freopen("newin", "r", stdin);

关于c - 从 C 重新路由 stdin 和 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58085696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com