【发布时间】:2012-03-02 21:48:01
【问题描述】:
在为符合 POSIX 的操作系统编写一个接受输入并产生输出的简单程序时,何时以及为什么应该这样做
myprogram file.in
优先考虑
myprogram < file.in
反之亦然?
我喜欢后者,因为我觉得文件处理应该是 shell 的责任,而不是我的程序。另一方面,我不太确定相同的代码如何适用于文件和标准输入——标准输入不应该是交互式的,即提示您输入吗?而在文件中,格式是可以理解和预定义的,例如有一个整数是输入值(在这种情况下 another 选项将简单地接受该值作为命令行参数),或者每一行都包含一个测试用例,它是一个空格列表- 分隔数字等。
例子会很棒。
请注意,我已经看过 Shell redirection vs explicit file handling code,但没有一个答案能在一般意义上真正回答这个问题。
【问题讨论】:
-
绝对没有理由期望标准输入是交互式的。做出这样的假设会给很多人带来麻烦,并导致很多软件的用处远不如应有的那么好。
-
@WilliamPursell:那么您会说对文件进行重定向,并将标准输入视为文件(没有交互式提示)吗?我只是在想,如果程序接受两个数字然后执行某些操作,则在您按两次 Enter 之前不会发生任何事情,而对于已经存在的文件,如果文件格式不正确,则可以显示错误消息.
-
@Mk12 :您的程序实际上可以区分交互和阅读重定向
stdin之间的区别。检查程序bc- 在命令行输入bc,它是交互式的。输入3 + 7回车,它会显示10。Ctrl+D退出。现在创建一个包含 1 行的文件3 + 7并运行bc < myfile
标签: file unix input posix stdin