问题描述
Noob Q,与最佳做法有关:
我正在使用yacc / lex / C为macOS编写MS BASIC解释器。它对scanf
和printf
使用PRINT
/ INPUT
。我想添加一个CLI选项以将那些重定向到文件。
我知道如何使用fopen / fclose和fprintf等技术地做到这一点。但是,这是“真正的” Unixen程序如何做到的呢?我希望尽可能地保持标准,以免在其他人检查代码时造成混乱。
在通用Unix / Linux / FBSD上,您会...
解决方法
(对于一般程序)
仅依靠父级(如shell)的正常重定向并没有错,但是如果您想为此提供一个参数(这也很好)。
至于使用printf
或fprintf
,我看不出有什么不同。我可能会根据典型情况选择一个或另一个。如果几乎总是在stdout上输出,则可能会使用printf和fprintf。可能造成混淆的部分是,其他人在阅读您的代码时可能不会意识到printf
不是程序标准输出(对于重定向,您可以使用freopen
或-在使用stdio- { {1}}。
(对于您的BASIC解释器)
在这种情况下,当您翻译dup2(,1);
和INPUT
时,PRINT
和scanf
似乎是合理的选择,但我不确定为什么您需要选择将它们更改为其他内容。