重定向运算符与文件处理

时间:2012-03-02 21:48:02

标签: file unix input posix stdin

为符合POSIX的操作系统编写一个简单的程序,接受输入并产生输出时,何时以及为什么

myprogram file.in

优先于

myprogram < file.in

反之亦然?

我喜欢后者,因为我觉得文件处理应该是shell的责任,而不是我的程序。另一方面,我不太确定相同的代码如何适用于文件和stdin-不应该stdin是交互式的,即提示您输入?而在文件中,格式被理解和预定义,例如,有一个整数是输入值(在这种情况下,另一个选项将简单地接受该值作为命令行参数),或者每行包含一个测试用例,它是一个空间列表 - 分隔号码等。

例子很棒。

请注意,我已经看过Shell redirection vs explicit file handling code,并且没有一个答案在一般意义上真正回答了这个问题。

2 个答案:

答案 0 :(得分:3)

这取决于偏好,您的计划的预期用途应该通知您的决定。

UNIX philosophy建议编写通过干净接口连接的简单工具。创建一个接受stdin的工具将使其更加通用。您将能够从现有文件或任何其他POSIX命令的输出中提供该工具。

答案 1 :(得分:1)

如果在命令行中给出一个文件,则大多数POSIX实用程序将对文件执行操作;如果未指定文件,则对stdin / stdout执行操作。常见的风格是

  • myprogram filename
  • myprogram -f filename
  • myprogram --file=filename

或个别输入和输出可指定。

这样可以灵活地提供文件,或使用重定向或流水线操作。

main处理参数并在必要时打开文件,然后将打开的文件流 - 无论是来自stdin还是打开的文件 - 传递给处理函数。

这符合UNIX哲学,正如sgmorrison所提到的那样。