如何解决使用C重定向程序输出,使用fprintf还是“更广泛使用”的解决方案?
Noob Q,与最佳做法有关:
我正在使用yacc / lex / C为macOS编写MS BASIC解释器。它对scanf
和printf
使用PRINT
/ INPUT
。我想添加一个CLI选项以将那些重定向到文件。
我知道如何使用fopen / fclose和fprintf等技术地做到这一点。但是,这是“真正的” Unixen程序如何做到的呢?我希望尽可能地保持标准,以免在其他人检查代码时造成混乱。
在通用Unix / Linux / FBSD上,您会...
- 将所有
printf
替换为fprintf(fp,
,并将默认fp
替换为标准输出? - 保留所有
printf
,但重定向stdout
吗? - 仅依靠外壳和管道,根本不提供此选项作为CLI选项吗?
解决方法
(对于一般程序)
仅依靠父级(如shell)的正常重定向并没有错,但是如果您想为此提供一个参数(这也很好)。
至于使用printf
或fprintf
,我看不出有什么不同。我可能会根据典型情况选择一个或另一个。如果几乎总是在stdout上输出,则可能会使用printf和fprintf。可能造成混淆的部分是,其他人在阅读您的代码时可能不会意识到printf
不是程序标准输出(对于重定向,您可以使用freopen
或-在使用stdio- { {1}}。
(对于您的BASIC解释器)
在这种情况下,当您翻译dup2(,1);
和INPUT
时,PRINT
和scanf
似乎是合理的选择,但我不确定为什么您需要选择将它们更改为其他内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。