在 C 中重定向程序输出,使用 fprintf 或 "more widely used" 解决方案?

Redirecting program output in C, use fprintf or "more widely used" solution?

Noob Q,相关最佳实践:

我正在使用 yacc/lex/C 为 macOS 编写 MS BASIC 解释器。它对 PRINTINPUT 使用 scanf/printf。我想添加一个 CLI 选项来将它们重定向到文件。

我知道如何从技术上做到这一点,使用 fopen/fclose 和 fprintf 等。但是,“真正的”Unixen 程序会这样做吗?我希望尽可能标准,以免别人检查代码时混淆。

关于通用 Unix/Linux/FBSD,你会...

  1. 将所有 printf 替换为 fprintf(fp, 并将默认 fp 替换为标准输出?
  2. 保留所有 printf 但重定向 stdout?
  3. 依赖 shell 和管道,根本不将其作为 CLI 选项提供?

(一般程序)

简单地依赖父级的正常重定向(比如 shell)并没有错,但是如果你想为此提供一个参数(这也完全没问题)。

至于使用printf还是fprintf,我看不出有什么区别。我可能会根据典型情况选择一个或另一个。如果它几乎总是在 stdout 上输出,否则可能会使用 printf 和 fprintf。可能令人困惑的部分是,另一个阅读您代码的人可能没有意识到 printf 不是程序标准输出(至于重定向,您可以使用 freopen 或 -before using stdio- dup2(, 1);).

(对于您的 BASIC 解释器)

在这种情况下,当您翻译 INPUTPRINT 时,scanfprintf 似乎是合乎逻辑的选择,我不确定您为什么会这样需要一个选项来将它们更改为其他内容。