Nejprve musíte při tisku do std::cout
vytisknout nové řádky , jinak std::getline()
nebude mít žádný celý řádek ke čtení.
Vylepšená verze:
#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;
}
Nyní zkuste toto:
./bin >file <file
nevidíte žádný výstup, protože jde do souboru. Ale pokud zastavíte program a podíváte se na soubor, hle, je plný
stars
stars
stars
stars
:-)
Také důvod, proč se při pokusu nemůže spustit smyčka zpětné vazby
./bin 0>&1
je, že skončíte se stdin i stdout připojenými k /dev/tty
(to znamená, že můžete vidět výstup).
Ale TTY zařízení nemůže nikdy uzavřít smyčku, protože se ve skutečnosti skládá ze dvou samostatných kanálů, z nichž jeden předává výstup do terminálu a druhý předává terminálový vstup procesu.
Pokud pro vstup a výstup použijete běžný soubor, lze smyčku uzavřít. Každý bajt zapsaný do souboru se z něj také přečte, pokud je k němu připojen stdin procesu. To je tak dlouho, dokud žádný jiný proces nečte soubor současně, protože každý bajt v proudu lze přečíst pouze jednou.