File 重定向操作符与文件处理
当为POSIX兼容操作系统编写一个接受输入并产生输出的简单程序时,何时以及为什么应该这样做File 重定向操作符与文件处理,file,unix,input,posix,stdin,File,Unix,Input,Posix,Stdin,当为POSIX兼容操作系统编写一个接受输入并产生输出的简单程序时,何时以及为什么应该这样做 myprogram file.in 被优先考虑 myprogram < file.in myprogram
myprogram file.in
被优先考虑
myprogram < file.in
myprogram
反之亦然
我喜欢后者,因为我觉得文件处理应该是shell的责任,而不是我的程序。另一方面,我不太确定同一代码如何适用于两个文件,并且stdin不应该是交互式的,即提示您输入?然而,在文件中,格式是可以理解和预定义的,例如,有一个整数作为输入值(在这种情况下,另一个选项是简单地接受该值作为命令行参数),或者每行包含一个测试用例,该测试用例是一个空格分隔的数字列表,等等
举个例子就好了
请注意,我已经看到了,但没有一个答案真正从一般意义上回答了这个问题。这取决于您的偏好,您的程序的预期用途应告知您的决定
建议编写通过干净接口连接的简单工具。创建一个接受stdin的工具将使它更加通用。您将能够从现有文件或任何其他POSIX命令的输出为该工具提供信息。这取决于您的首选项,您的程序的预期用途应告知您的决定
建议编写通过干净接口连接的简单工具。创建一个接受stdin的工具将使它更加通用。您将能够从现有文件或任何其他POSIX命令的输出中为该工具提供信息。如果命令行中给出了一个文件,则大多数POSIX实用程序将对该文件起作用;如果未指定任何文件,则对stdin/stdout起作用。常见的样式是
myprogram文件名
myprogram-f文件名
myprogram--file=filename
main
处理参数并在必要时打开文件,然后将打开的文件流(无论是来自stdin
还是您打开的文件)传递给处理函数
正如sgmorrison所提到的,这符合UNIX的原理。如果命令行中给出了一个文件,则大多数POSIX实用程序将对该文件起作用;如果没有指定文件,则在stdin/stdout上起作用。常见的样式是
myprogram文件名
myprogram-f文件名
myprogram--file=filename
main
处理参数并在必要时打开文件,然后将打开的文件流(无论是来自stdin
还是您打开的文件)传递给处理函数
正如Morrison所提到的,这符合UNIX的理念。完全没有理由期望stdin是交互式的。做出这样的假设会让很多人陷入麻烦,并导致许多软件远没有它应有的用处。@williampersell:那么你会说对文件进行重定向,并将stdin当作一个文件(没有交互提示)来对待吗?我只是在想,如果程序接受两个数字,然后做一些事情,在你按两次enter键之前什么都不会发生,而对于一个已经存在的文件,如果文件格式不正确,您可以显示一条错误消息。@Mk12:您的程序实际上可以区分交互和读取重定向的
stdin
。在命令行中检查程序bc
-键入bc
,它是交互式的。键入3+7
点击回车键,显示10
Ctrl+D
退出。现在创建一个文件,其中一行写着3+7
,然后运行bc
,完全没有理由期望stdin是交互式的。做出这样的假设会让很多人陷入麻烦,并导致许多软件远没有它应有的用处。@williampersell:那么你会说对文件进行重定向,并将stdin当作一个文件(没有交互提示)来对待吗?我只是在想,如果程序接受两个数字,然后做一些事情,在你按两次enter键之前什么都不会发生,而对于一个已经存在的文件,如果文件格式不正确,您可以显示一条错误消息。@Mk12:您的程序实际上可以区分交互和读取重定向的stdin
。在命令行中检查程序bc
-键入bc
,它是交互式的。键入3+7
点击回车键,显示10
Ctrl+D
退出。现在创建一个文件,其中一行写着3+7
,然后运行bc