📜  标准流 (1)

📅  最后修改于: 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 中。

总结

标准流是程序开发中非常重要的概念,可以实现很多有用的功能。在程序中,可以使用标准输入流、标准输出流和标准错误输出流来进行输入输出操作。合理地使用标准流可以实现文件重定向、过滤器等功能。