Primero, debe generar líneas nuevas al imprimir en std::cout
, de lo contrario std::getline()
no tendrá ninguna línea completa para leer.
Versión mejorada:
#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;
}
Ahora prueba esto:
./bin >file <file
no ve ninguna salida, porque va al archivo. Pero si detienes el programa y miras el archivo, mira, está lleno de
stars
stars
stars
stars
:-)
Además, la razón por la que el ciclo de retroalimentación no puede comenzar cuando intenta
./bin 0>&1
es que terminas con stdin y stdout conectados a /dev/tty
(lo que significa que puede ver la salida).
Pero un dispositivo TTY nunca puede cerrar el ciclo, porque en realidad consta de dos canales separados, uno que pasa la salida a la terminal y otro que pasa la entrada de la terminal al proceso.
Si usa un archivo regular para entrada y salida, el bucle se puede cerrar. Cada byte escrito en el archivo también se leerá, si el stdin del proceso está conectado a él. Eso es siempre que ningún otro proceso lea el archivo simultáneamente, porque cada byte en una secuencia solo se puede leer una vez.