📅  最后修改于: 2023-12-03 15:26:40.573000             🧑  作者: Mango
标准流(Standard Streams)是一个概念,涉及到程序开发中的三个标准输入输出通道:标准输入(stdin)、标准输出(stdout)、标准错误输出(stderr)。在程序运行时,它们是默认开启的。在程序开发过程中,合理地使用标准流可以实现文件重定向、过滤器等功能。
标准输入(stdin)是程序默认的输入通道。在命令行中,输入的文本会被传递给这个通道。在程序中,这个输入通道可以通过标准输入文件流进行访问。
程序中的标准输入流通常使用 cin
来进行访问,例如:
#include <iostream>
using namespace std;
int main()
{
string name;
cout << "What is your name?" << endl;
cin >> name;
cout << "Hello, " << name << "!" << endl;
return 0;
}
在这个例子中,用户在命令行中输入的文本会被传递给 cin
,并存储在 name
变量中。这个程序接着会向标准输出流输出问候语。
标准输出(stdout)是程序默认的输出通道。在命令行中,输出的文本会被打印到屏幕上。在程序中,这个输出通道可以通过标准输出文件流进行访问。
程序中的标准输出流通常使用 cout
来进行访问,例如:
#include <iostream>
using namespace std;
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
在这个例子中,程序向标准输出流输出了一条问候语。输出操作使用了 <<
运算符。
标准错误输出(stderr)是程序输出错误信息的通道。在命令行中,错误信息会被打印到屏幕上。在程序中,这个输出通道可以通过标准错误输出文件流进行访问。
程序中的标准错误输出流通常使用 cerr
来进行访问,例如:
#include <iostream>
using namespace std;
int main()
{
cerr << "Something went wrong!" << endl;
return 0;
}
在这个例子中,程序向标准错误输出流输出了一条错误信息。这条信息会被打印到屏幕上,而不是被保存在日志文件中。
文件重定向是一种将标准流重新定向到文件中的技术。在命令行中,可以使用 <
和 >
运算符将输入和输出重定向到指定的文件。在程序中,可以通过文件流将标准流定向到文件中。
输入重定向的运算符是 <
。例如,下面的命令会将文件 input.txt
中的内容作为程序的输入:
./my_program < input.txt
在程序中,可以使用 fstream
来进行输入重定向,例如:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream input_file("input.txt");
string name;
input_file >> name;
cout << "Hello, " << name << "!" << endl;
return 0;
}
在这个例子中,程序使用 ifstream
来打开文件 input.txt
并读取其中的内容。
输出重定向的运算符是 >
。例如,下面的命令会将程序的输出保存到文件 output.txt
中:
./my_program > output.txt
在程序中,可以使用 fstream
来进行输出重定向,例如:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ofstream output_file("output.txt");
output_file << "Hello, world!" << endl;
return 0;
}
在这个例子中,程序使用 ofstream
来打开文件 output.txt
并将输出内容写入到这个文件中。
过滤器是指可以将标准输入流作为输入,并将处理结果输出到标准输出流的程序。使用过滤器可以很容易地实现一些常见的文本处理功能。在程序中,可以通过管道将多个过滤器连接起来。
例如,下面的命令使用 sort
过滤器将文件 input.txt
中的内容按照字母顺序排序,并保存到文件 output.txt
中:
sort input.txt > output.txt
在程序中,可以使用标准流和管道来实现类似的功能。例如:
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
string input;
while (getline(cin, input))
{
reverse(input.begin(), input.end());
cout << input << endl;
}
return 0;
}
这个程序会接收标准输入流中的输入,并将每一行翻转后输出到标准输出流中。在命令行中,可以使用管道将多个过滤器连接起来:
cat input.txt | ./my_filter | sort | uniq > output.txt
在这个例子中,cat
命令将文件 input.txt
中的内容传递给 my_filter
过滤器,my_filter
过滤器将每一行翻转后输出到标准输出流中,sort
过滤器将这些内容排序,并去除重复行,最后的结果保存到文件 output.txt
中。
标准流是程序开发中非常重要的概念,可以实现很多有用的功能。在程序中,可以使用标准输入流、标准输出流和标准错误输出流来进行输入输出操作。合理地使用标准流可以实现文件重定向、过滤器等功能。