猫文件名 |命令和命令<文件名的行为不同
cat filename | command and command < filename behaving differently
#include <string>
#include <iostream>
int main() {
std::string str;
char magic[9];
std::cin.read((char *)magic, sizeof(magic));
std::cout << "eof/fail=" << std::cin.eof() << '/' << std::cin.fail() << 'n';
std::cin.clear();
std::cin.seekg(0, std::ios::beg);
std::cout << "eof/fail=" << std::cin.eof() << '/' << std::cin.fail() << 'n';
while (std::cin >> str) {
std::cout << str << std::endl;
}
}
我的代码包含std :: cin
上的Seekg(0(fucntion的实现表现不同当运行时 ./a.out < filename
和 cat filename | ./a.out
我正在考虑同等的方式。但是我很惊讶地看到他们的行为不同
我的问题是两种方式的主要区别是什么?它们不是获得标准输入的一种方法吗?
它们不是获得标准输入的一种方法吗?
是的,但是&hellip;
我正在考虑同等的方式。
它们非常不等。
cat filename | ./a.out
在这里,您的外壳运行了程序cat
,告诉它与称为filename
的文件的内容相呼应。它还运行程序a.out
。它在它们之间打开"管道",并从一个人的标准输出流到对方的标准输入流。
./a.out < filename
在这里,您的外壳运行程序a.out
,使文件filename
通过该过程的标准输入流提供。这称为输入重定向。
您可以围绕"文件"(更通常是块设备(寻找。如果从文件进行输入重定向,则您的外壳巧妙地告诉您的程序可以将流视为块设备,因此您可以享受寻求。
但是,使用管道,一旦您食用了数据,就消失了。你不能回到开始;这不是容器。这是数据流。
相关文章:
- 从命令行c++发送文本文件名
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 为cl.exe(Visual Studio代码)指定命令行C++版本
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 使用QProcess执行命令,并将结果存储在QStringList中
- 数组长度,为什么从命令行获取时不能使用它?
- 为什么文件名被设置为一个点,而不是在读取矢量中的文件名时
- 如果用户输入无效,如何使用字符串变量-C++重复输入命令
- clang整洁10忽略了我的NOLINT命令
- 猫文件名 |命令和命令<文件名的行为不同
- C++,如何从命令行提供输入文件名,而无需在程序中对其进行硬编码
- 是否有一个WinAPI可以从带有可选空格和其他参数的命令行获取文件名
- 从控制台应用中的命令行参数获取文件名C++
- 将命令行参数作为文件名以打开C++
- 输入文件名作为命令
- 从命令行读取文件名并在visualstudio中打开
- 命令行错误D8003:链接时缺少源文件名
- 是否有一种方法可以识别Windows命令提示符,而不管文件名或位置
- 从命令行读取文件名,并在我的文件中使用它
- 从服务器中不同位置的命令行参数传递的打开文件名