在 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 解释器。它对 PRINT
和 INPUT
使用 scanf
/printf
。我想添加一个 CLI 选项来将它们重定向到文件。
我知道如何从技术上做到这一点,使用 fopen/fclose 和 fprintf 等。但是,“真正的”Unixen 程序会这样做吗?我希望尽可能标准,以免别人检查代码时混淆。
关于通用 Unix/Linux/FBSD,你会...
- 将所有
printf
替换为 fprintf(fp,
并将默认 fp
替换为标准输出?
- 保留所有
printf
但重定向 stdout
?
- 依赖 shell 和管道,根本不将其作为 CLI 选项提供?
(一般程序)
简单地依赖父级的正常重定向(比如 shell)并没有错,但是如果你想为此提供一个参数(这也完全没问题)。
至于使用printf
还是fprintf
,我看不出有什么区别。我可能会根据典型情况选择一个或另一个。如果它几乎总是在 stdout 上输出,否则可能会使用 printf 和 fprintf。可能令人困惑的部分是,另一个阅读您代码的人可能没有意识到 printf
不是程序标准输出(至于重定向,您可以使用 freopen
或 -before using stdio- dup2(, 1);
).
(对于您的 BASIC 解释器)
在这种情况下,当您翻译 INPUT
和 PRINT
时,scanf
和 printf
似乎是合乎逻辑的选择,我不确定您为什么会这样需要一个选项来将它们更改为其他内容。
Noob Q,相关最佳实践:
我正在使用 yacc/lex/C 为 macOS 编写 MS BASIC 解释器。它对 PRINT
和 INPUT
使用 scanf
/printf
。我想添加一个 CLI 选项来将它们重定向到文件。
我知道如何从技术上做到这一点,使用 fopen/fclose 和 fprintf 等。但是,“真正的”Unixen 程序会这样做吗?我希望尽可能标准,以免别人检查代码时混淆。
关于通用 Unix/Linux/FBSD,你会...
- 将所有
printf
替换为fprintf(fp,
并将默认fp
替换为标准输出? - 保留所有
printf
但重定向stdout
? - 依赖 shell 和管道,根本不将其作为 CLI 选项提供?
(一般程序)
简单地依赖父级的正常重定向(比如 shell)并没有错,但是如果你想为此提供一个参数(这也完全没问题)。
至于使用printf
还是fprintf
,我看不出有什么区别。我可能会根据典型情况选择一个或另一个。如果它几乎总是在 stdout 上输出,否则可能会使用 printf 和 fprintf。可能令人困惑的部分是,另一个阅读您代码的人可能没有意识到 printf
不是程序标准输出(至于重定向,您可以使用 freopen
或 -before using stdio- dup2(, 1);
).
(对于您的 BASIC 解释器)
在这种情况下,当您翻译 INPUT
和 PRINT
时,scanf
和 printf
似乎是合乎逻辑的选择,我不确定您为什么会这样需要一个选项来将它们更改为其他内容。