为什么你会选择"a.out file"而不是"a.out < file"反之亦然?C++
Why you would choose "a.out file" over "a.out < file" or vice versa? c++
我想我很难理解其中的差异。这一点很重要,因为用户如何知道在命令行中键入什么?在命令行中,a.out文件用于需要显式打开文件的文件处理a.out<文件是重定向输入,您不需要打开该文件。利弊
Stdin在您希望能够将一个程序的输出管道连接到另一程序的输入时特别有用,以此类推,如下所示:
cat myfile.txt | grep MyKeyword | wc -l
(它将打印出myfile.txt中包含字符串MyKeyword的行数)
如果"grep"answers"wc"实用程序设置为仅从指定文件读取,而不是从stdin读取,那么上述任务将更加困难;你必须分多个步骤来做:
grep MyKeyword myfile.txt > temp.txt
wc -l temp.txt
rm temp.txt
另一方面,有时您的程序需要从多个文件中读取。例如,如果你想将几个文件连接在一起,你可以这样做:
cat part1.txt part2.txt part3.txt>wholething.txt
如果"cat"只支持从stdin读取,那么很难做到这一点,因为您需要某种方法将多个文件通过管道传输到cat的stdin流中。
此外,如果程序需要以非线性顺序读取文件(例如,在文件中向前或向后读取fseek(),而不仅仅是直接读取),则无法使用stdin来完成此操作,因为您无法在管道上进行搜索。
有一个标准的Unix习惯用法,"filter"程序将读取命令行上指定的每个文件,或者如果命令行上没有指定文件,则从标准输入读取,并将输出写入标准输出。这样的滤波器的例子是sort
和grep
。程序tr
是一个罕见的例外,它是一个纯过滤器;它只读取标准输入,只写入标准输出。
在命令行上接受文件名的优点是,对程序的单个调用可以读取多个文件;程序还可以识别每一行输入来自哪个文件。读取标准输入的优点是不必编写代码来打开文件。显然,有一些方法可以处理不读取文件的程序;例如,可以使用cat
读取文件并将输出通过管道传输到程序的标准输入。缺点是,程序无法判断任何给定行来自哪个文件(即使是重定向的单个文件)。
因此,这两种符号通常是不等价的。两者都很有用。许多有用的程序都支持这两种符号。
如果您在程序中使用cin>>
,并且不想从键盘提供输入,则将其存储在一个文件(比如文件)中并使用./a.out < file
。它被称为输入重定向。
./a.out file
没有任何意义。
./a.out < file > file_output
表示从file
获取输入并将程序的输出写入file_output
- Seg Fault Issue C++ (file IO / getline)
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 即使使用调试编译标志,表达式也是"optimized out"
- C++双重释放或损坏(out)
- Android NDK clang 编译器错误在 Windows 上显示'No such file or directory'
- 将 out/in out 参数与 if/switch 的 init 语句一起使用
- File.cpp.o:OpenPose 标志 CMakeFiles/.. 的多重定义/main.cpp.o:首先在这里定
- Visual Studio C++ Project File CustomBuild Task: Filter Outp
- 已解决 - C++ 的崇高文本中的"fatal error: opencv: no such file or directory"
- 在命令行上将输入显示到数组中时如何删除 ./a.out?
- 可视化 如何在C++中将字符数组转换为 FILE 类型
- 如何在从文件中读取整数时使用 file.eof()?
- "No such file or directory" C++标头问题
- 为什么我的向量::擦除调用会抛出"vector subscript out of range"?
- 使用 sftp_open() 使用 C++ 中的 SFTP libssh 将文件从本地复制到远程时,File 返回 N
- Visual Studio "fatal error LNK1104: cannot open file"未使用或包含的库
- 解决方案在第 25 行执行错误'out of bounds'
- 为什么你会选择"a.out file"而不是"a.out < file"反之亦然?C++
- C++,即使在命令行中使用 file.out >打印到屏幕