まず、 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 デバイスは実際には 2 つの別個のチャネルで構成されているため、ループを閉じることはできません。1 つは出力を端末に渡し、もう 1 つは端末入力をプロセスに渡します。
入出力に通常のファイルを使用すると、ループを閉じることができます。プロセスの標準入力がファイルに接続されている場合、ファイルに書き込まれたすべてのバイトはファイルからも読み取られます。ストリーム内の各バイトは 1 回しか読み取れないため、他のプロセスがファイルから同時に読み取りを行わない限り、これが可能です。