gpt4 book ai didi

c++ - 如何将程序输出重定向为输入

转载 作者:行者123 更新时间:2023-12-02 09:37:28 27 4
gpt4 key购买 nike

我编写了一个简单的 C++ 程序用于教程目的。
我的目标是无限循环。

#include <iostream>
#include <string>

int main()
{
std::cout << "text";

for(;;) {
std::string string_object{};
std::getline(std::cin, string_object);
std::cout << string_object;
}

return 0;
}
编译后我像这样运行它: ./bin 0>&1我期望发生的是输出到标准输出的“文本”,它现在也将成为程序的标准输入,它将永远循环。为什么不发生?

最佳答案

首先打印到std::cout时需要输出换行符, 否则 std::getline()不会有任何完整的行来阅读。
改良版:

#include <iostream>
#include <string>

int main()
{
std::cout << "stars" << std::endl;

for(;;) {
std::string string_object;
std::getline(std::cin, string_object);
std::cout << string_object << std::endl;
}

return 0;
}
现在试试这个:
./bin >file <file
您看不到任何输出,因为它将转到文件。但是如果你停止程序并查看文件,你看,它充满了
stars
stars
stars
stars
:-)
此外,当您尝试时反馈循环无法启动的原因
./bin 0>&1
也就是说,你最终将标准输入和标准输出都连接到 /dev/tty(意味着您可以看到输出)。
但是 TTY 设备永远无法关闭循环,因为它实际上由两个独立的 channel 组成,一个将输出传递给终端,一个将终端输入传递给进程。
如果您使用常规文件进行输入和输出,则可以关闭循环。如果进程的 stdin 连接到文件,则写入文件的每个字节也将从文件中读取。只要没有其他进程同时从文件读取,因为流中的每个字节只能读取一次。

关于c++ - 如何将程序输出重定向为输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64146919/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com